From 1a542794770402a3d399fc33287f3946ae6ff55e Mon Sep 17 00:00:00 2001 From: leo108 Date: Mon, 5 Apr 2021 14:49:29 +0800 Subject: [PATCH 01/18] Make symbol and params attribute always available for all kinds of Symbol (#219) --- src/flowchart.symbol.condition.js | 2 +- src/flowchart.symbol.inputoutput.js | 1 + src/flowchart.symbol.js | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/flowchart.symbol.condition.js b/src/flowchart.symbol.condition.js index 4a610645..a01624fc 100644 --- a/src/flowchart.symbol.condition.js +++ b/src/flowchart.symbol.condition.js @@ -11,7 +11,6 @@ function Condition(chart, options) { this.textMargin = this.getAttr('text-margin'); this.yes_direction = options.direction_yes; this.no_direction = options.direction_no; - this.params = options.params; if (!this.no_direction && this.yes_direction === 'right') { this.no_direction = 'bottom'; } else if (!this.yes_direction && this.no_direction === 'bottom') { @@ -63,6 +62,7 @@ function Condition(chart, options) { this.group.push(symbol); symbol.insertBefore(this.text); + this.symbol = symbol this.initialize(); } diff --git a/src/flowchart.symbol.inputoutput.js b/src/flowchart.symbol.inputoutput.js index 411c691d..cd8573d3 100644 --- a/src/flowchart.symbol.inputoutput.js +++ b/src/flowchart.symbol.inputoutput.js @@ -44,6 +44,7 @@ function InputOutput(chart, options) { this.group.push(symbol); symbol.insertBefore(this.text); + this.symbol = symbol this.initialize(); } diff --git a/src/flowchart.symbol.js b/src/flowchart.symbol.js index 108d566f..7ae48628 100644 --- a/src/flowchart.symbol.js +++ b/src/flowchart.symbol.js @@ -15,6 +15,7 @@ function Symbol(chart, options, symbol) { this.rightLines = []; this.topLines = []; this.bottomLines = []; + this.params = options.params; this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined; From 1388ea381739d8b3881dd6fffb80f7bda7a3eaba Mon Sep 17 00:00:00 2001 From: Adriano Raiano Date: Fri, 14 May 2021 07:33:43 +0200 Subject: [PATCH 02/18] ident fix --- src/flowchart.symbol.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/flowchart.symbol.js b/src/flowchart.symbol.js index 7ae48628..536bf604 100644 --- a/src/flowchart.symbol.js +++ b/src/flowchart.symbol.js @@ -48,8 +48,8 @@ function Symbol(chart, options, symbol) { this.text.node.addEventListener("click", function(evt) { window[options.function](evt,options); }, false); - } - + } + if (options.target) { this.text.attr('target', options.target); } var maxWidth = this.getAttr('maxWidth'); From ec3b3348ed73fb826ed81f67a907f31f3d239b6f Mon Sep 17 00:00:00 2001 From: Adriano Raiano Date: Mon, 18 Oct 2021 23:36:34 +0200 Subject: [PATCH 03/18] Custom annotations for parallel #225 --- README.md | 8 ++- package.json | 2 +- release/flowchart.js | 94 +++++++++++++++---------------- release/flowchart.js.map | 2 +- release/flowchart.min.js | 8 +-- release/flowchart.min.js.map | 2 +- releasenotes.md | 4 ++ site | 2 +- src/flowchart.parse.js | 19 +++++-- src/flowchart.symbol.condition.js | 5 +- src/flowchart.symbol.parallel.js | 10 ++-- 11 files changed, 88 insertions(+), 68 deletions(-) diff --git a/README.md b/README.md index 934e9068..eba2fa5c 100644 --- a/README.md +++ b/README.md @@ -227,11 +227,15 @@ op1=>operation: My Operation sub1=>subroutine: My Subroutine cond=>condition: linear or polynomial :>http://www.google.com io=>inputoutput: catch something... +para=>parallel: 3 possibilities st->op1->cond cond(true@linear)->io->e cond(false@polynomial)->sub1(right) -sub1(right)->op1 +sub1(right)->para +para(path1@an1, top)->cond +para(path2@an2, right)->op1 +para(path3@an3, bottom)->e ```
@@ -251,7 +255,7 @@ Many thanks to [js-sequence-diagrams](http://bramp.github.io/js-sequence-diagram ## Licence -Copyright (c) 2019 Adriano Raiano +Copyright (c) 2021 Adriano Raiano Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/package.json b/package.json index ba9b9809..d7f7ce28 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "author": "adrai", "name": "flowchart.js", - "version": "1.15.0", + "version": "1.16.0", "main": "./index", "private": false, "engines": { diff --git a/release/flowchart.js b/release/flowchart.js index 69181fac..7941b1f9 100644 --- a/release/flowchart.js +++ b/release/flowchart.js @@ -1,5 +1,5 @@ -// flowchart.js, v1.14.1 -// Copyright (c)2020 Adriano Raiano (adrai). +// flowchart.js, v1.16.0 +// Copyright (c)2021 Adriano Raiano (adrai). // Distributed under MIT license // http://adrai.github.io/flowchart.js @@ -131,7 +131,8 @@ this.chart = chart, this.group = this.chart.paper.set(), this.symbol = symbol, this.connectedTo = [], this.symbolType = options.symbolType, this.flowstate = options.flowstate || "future", this.lineStyle = options.lineStyle || {}, this.key = options.key || "", this.leftLines = [], - this.rightLines = [], this.topLines = [], this.bottomLines = [], this.next_direction = options.next && options.direction_next ? options.direction_next : void 0, + this.rightLines = [], this.topLines = [], this.bottomLines = [], this.params = options.params, + this.next_direction = options.next && options.direction_next ? options.direction_next : void 0, this.text = this.chart.paper.text(0, 0, options.text), //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t options.key && (this.text.node.id = options.key + "t"), this.text.node.setAttribute("class", this.getAttr("class") + "t"), this.text.attr({ @@ -761,7 +762,7 @@ var condOpt = next.split(","); next = condOpt[0], direction = condOpt[1].trim(); } - if (ann && ("yes" == next || "true" == next ? realSymb.yes_annotation = ann : realSymb.no_annotation = ann, + if (ann && ("condition" === realSymb.symbolType ? "yes" === next || "true" === next ? realSymb.yes_annotation = ann : realSymb.no_annotation = ann : "parallel" === realSymb.symbolType && ("path1" === next ? realSymb.path1_annotation = ann : "path2" === next ? realSymb.path2_annotation = ann : "path3" === next && (realSymb.path3_annotation = ann)), ann = null), chart.start || (chart.start = realSymb), iS + 1 < lenS) { var nextSymb = flowSymbols[iS + 1]; realSymb[next] = getSymbol(nextSymb), realSymb["direction_" + next] = direction, @@ -787,7 +788,7 @@ options = options || {}, Symbol.call(this, chart, options), this.yes_annotation = options.yes_annotation, this.no_annotation = options.no_annotation, this.textMargin = this.getAttr("text-margin"), this.yes_direction = options.direction_yes, this.no_direction = options.direction_no, - this.params = options.params, this.no_direction || "right" !== this.yes_direction ? this.yes_direction || "bottom" !== this.no_direction || (this.yes_direction = "right") : this.no_direction = "bottom", + this.no_direction || "right" !== this.yes_direction ? this.yes_direction || "bottom" !== this.no_direction || (this.yes_direction = "right") : this.no_direction = "bottom", this.yes_direction = this.yes_direction || "bottom", this.no_direction = this.no_direction || "right", this.text.attr({ x: 2 * this.textMargin @@ -827,10 +828,12 @@ options.key && (symbol.node.id = options.key), symbol.node.setAttribute("class", this.getAttr("class")), this.text.attr({ y: symbol.getBBox().height / 2 - }), this.group.push(symbol), symbol.insertBefore(this.text), this.initialize(); + }), this.group.push(symbol), symbol.insertBefore(this.text), this.symbol = symbol, + this.initialize(); } var Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2), inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits, drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3), drawPath = drawAPI.drawPath; inherits(Condition, Symbol), Condition.prototype.render = function() { + var self = this; this.yes_direction && (this[this.yes_direction + "_symbol"] = this.yes_symbol), this.no_direction && (this[this.no_direction + "_symbol"] = this.no_symbol); var lineLength = this.getAttr("line-length"); @@ -842,45 +845,39 @@ } if (this.right_symbol) { var rightPoint = this.getRight(); - if (!this.right_symbol.isPositioned) { - this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2), this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength); - var self = this; - !function shift() { - for (var symb, hasSymbolUnder = !1, i = 0, len = self.chart.symbols.length; i < len; i++) if (symb = self.chart.symbols[i], - !self.params["align-next"] || "no" !== self.params["align-next"]) { - var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x); - if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) { - hasSymbolUnder = !0; - break; - } - } - if (hasSymbolUnder) { - if ("end" === self.right_symbol.symbolType) return; - self.right_symbol.setX(symb.getX() + symb.width + lineLength), shift(); + this.right_symbol.isPositioned || (this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2), + this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength), function shift() { + for (var symb, hasSymbolUnder = !1, i = 0, len = self.chart.symbols.length; i < len; i++) if (symb = self.chart.symbols[i], + !self.params["align-next"] || "no" !== self.params["align-next"]) { + var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x); + if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) { + hasSymbolUnder = !0; + break; } - }(), this.right_symbol.isPositioned = !0, this.right_symbol.render(); - } + } + if (hasSymbolUnder) { + if ("end" === self.right_symbol.symbolType) return; + self.right_symbol.setX(symb.getX() + symb.width + lineLength), shift(); + } + }(), this.right_symbol.isPositioned = !0, this.right_symbol.render()); } if (this.left_symbol) { var leftPoint = this.getLeft(); - if (!this.left_symbol.isPositioned) { - this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2), this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength)); - var self = this; - !function shift() { - for (var symb, hasSymbolUnder = !1, i = 0, len = self.chart.symbols.length; i < len; i++) if (symb = self.chart.symbols[i], - !self.params["align-next"] || "no" !== self.params["align-next"]) { - var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x); - if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) { - hasSymbolUnder = !0; - break; - } - } - if (hasSymbolUnder) { - if ("end" === self.left_symbol.symbolType) return; - self.left_symbol.setX(symb.getX() + symb.width + lineLength), shift(); + this.left_symbol.isPositioned || (this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2), + this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength)), function shift() { + for (var symb, hasSymbolUnder = !1, i = 0, len = self.chart.symbols.length; i < len; i++) if (symb = self.chart.symbols[i], + !self.params["align-next"] || "no" !== self.params["align-next"]) { + var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x); + if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) { + hasSymbolUnder = !0; + break; } - }(), this.left_symbol.isPositioned = !0, this.left_symbol.render(); - } + } + if (hasSymbolUnder) { + if ("end" === self.left_symbol.symbolType) return; + self.left_symbol.setX(symb.getX() + symb.width + lineLength), shift(); + } + }(), this.left_symbol.isPositioned = !0, this.left_symbol.render()); } }, Condition.prototype.renderLines = function() { this.yes_symbol && this.drawLineTo(this.yes_symbol, this.yes_annotation ? this.yes_annotation : this.getAttr("yes-text"), this.yes_direction), @@ -894,9 +891,11 @@ function(module, exports, __webpack_require__) { function Parallel(chart, options) { var symbol = chart.paper.rect(0, 0, 0, 0); - options = options || {}, Symbol.call(this, chart, options, symbol), this.textMargin = this.getAttr("text-margin"), - this.path1_direction = "bottom", this.path2_direction = "right", this.path3_direction = "top", - this.params = options.params, "path1" === options.direction_next && !options[options.direction_next] && options.next && (options[options.direction_next] = options.next), + options = options || {}, Symbol.call(this, chart, options, symbol), this.path1_annotation = options.path1_annotation || "", + this.path2_annotation = options.path2_annotation || "", this.path3_annotation = options.path3_annotation || "", + this.textMargin = this.getAttr("text-margin"), this.path1_direction = "bottom", + this.path2_direction = "right", this.path3_direction = "top", this.params = options.params, + "path1" === options.direction_next && !options[options.direction_next] && options.next && (options[options.direction_next] = options.next), "path2" === options.direction_next && !options[options.direction_next] && options.next && (options[options.direction_next] = options.next), "path3" === options.direction_next && !options[options.direction_next] && options.next && (options[options.direction_next] = options.next), options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3 ? "right" === options.direction_path1 ? (this.path2_direction = "bottom", @@ -970,9 +969,9 @@ }(), this.right_symbol.isPositioned = !0, this.right_symbol.render()); } }, Parallel.prototype.renderLines = function() { - this.path1_symbol && this.drawLineTo(this.path1_symbol, "", this.path1_direction), - this.path2_symbol && this.drawLineTo(this.path2_symbol, "", this.path2_direction), - this.path3_symbol && this.drawLineTo(this.path3_symbol, "", this.path3_direction); + this.path1_symbol && this.drawLineTo(this.path1_symbol, this.path1_annotation, this.path1_direction), + this.path2_symbol && this.drawLineTo(this.path2_symbol, this.path2_annotation, this.path2_direction), + this.path3_symbol && this.drawLineTo(this.path3_symbol, this.path3_annotation, this.path3_direction); }, module.exports = Parallel; }, /* 7 */ /*!********************************!*\ @@ -1161,7 +1160,8 @@ options.key && (symbol.node.id = options.key), symbol.node.setAttribute("class", this.getAttr("class")), this.text.attr({ y: symbol.getBBox().height / 2 - }), this.group.push(symbol), symbol.insertBefore(this.text), this.initialize(); + }), this.group.push(symbol), symbol.insertBefore(this.text), this.symbol = symbol, + this.initialize(); } var Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2), inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits, drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3), drawPath = drawAPI.drawPath; inherits(InputOutput, Symbol), InputOutput.prototype.getLeft = function() { diff --git a/release/flowchart.js.map b/release/flowchart.js.map index e57934f6..b7cfa2ea 100644 --- a/release/flowchart.js.map +++ b/release/flowchart.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.js","webpack:///webpack/bootstrap 4f3ba54055edd874e520","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.symbol.parallel.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_16__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","lineStyle","key","leftLines","rightLines","topLines","bottomLines","next_direction","next","undefined","text","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","function","cursor","addEventListener","evt","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","self","lineLength","rightPoint","isPositioned","shift","symb","hasSymbolUnder","len","diff","Math","abs","leftPoint","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","yOffset","right","bottom","top","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","max","rightStart","topEnd","bottomStart","diffX","leftStart","topStart","leftEnd","rightEnd","l","llen","lines","otherLine","ePath","lPath","iP","lenP","newPath","line1_from_x","line1_from_y","line1_to_x","line1_to_y","lP","lenlP","newLinePath","line2_from_x","line2_from_y","line2_to_x","line2_to_y","res","onLine1","onLine2","newSegment","splice","minXFromSymbols","maxXFromLine","drawPath","location","points","path","pathValues","from","to","toString","arrow-end","centerText","textPath","textAnchor","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getStyle","s","startIndex","endIndex","getSymbValue","getSymbol","getNextPath","flowSymb","getAnnotation","tmp","tmp_split","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Parallel","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","path1","path2","path3","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","parts","params","match","entries","entry","sub","join","txtAndState","pop","ann","flowSymbols","iS","lenS","symbVal","realSymb","direction","condOpt","yes_annotation","no_annotation","nextSymb","lineStyleSymbols","iSS","lenSS","curSymb","nextSymbol","JSON","textMargin","yes_direction","direction_yes","no_direction","direction_no","startX","startY","yes_symbol","no_symbol","bottom_symbol","right_symbol","left_symbol","rect","path1_direction","path2_direction","path3_direction","direction_next","direction_path1","direction_path2","direction_path3","path1_symbol","path2_symbol","path3_symbol","top_symbol","topPoint","Raphael","handle","flowChart","maxHeight","maxY","minX","minY","leftX","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","parallel","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","innerWrap","jQuery","$","paramFit","needle","haystack","isArray","includes","methods","init","each","$this","html","setFlowStateByParam","param","paramValue","newFlowState","nextSymbolKeys","property","hasOwnProperty","val","nski","nextSymbolKey","clearFlowState","fn","methodOrOptions","apply","slice","error"],"mappings":"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","file":"flowchart.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_16__) {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_16__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 9);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 15);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ }),\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ (function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ }),\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t this.lineStyle = (options.lineStyle || {});\n\t this.key = (options.key || '');\n\t this.leftLines = [];\n\t this.rightLines = [];\n\t this.topLines = [];\n\t this.bottomLines = [];\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t \n\t //ndrqu Add click function with event and options params\n\t if (options.function) { \n\t this.text.attr({ 'cursor' : 'pointer' });\n\t\n\t this.text.node.addEventListener(\"click\", function(evt) {\n\t window[options.function](evt,options);\n\t }, false);\n\t }\n\t \n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t\n\t //ndrqu Add click function with event and options params\n\t if (options.function) { \n\t symbol.node.addEventListener(\"click\", function(evt) {\n\t window[options.function](evt,options);\n\t }, false);\n\t symbol.attr({ 'cursor' : 'pointer' });\n\t }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var self = this;\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.next.symbolType === 'end') return;\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else if (this.next_direction === 'left') {\n\t\n\t var leftPoint = this.getLeft();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.setY(leftPoint.y - this.next.height/2);\n\t this.next.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.next.symbolType === 'end') return;\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, this.getAttr('arrow-text') || '', this.next_direction);\n\t } else {\n\t this.drawLineTo(this.next, this.getAttr('arrow-text') || '');\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n\t if (this.connectedTo.indexOf(symbol) < 0) {\n\t this.connectedTo.push(symbol);\n\t }\n\t\n\t var x = this.getCenter().x,\n\t y = this.getCenter().y,\n\t right = this.getRight(),\n\t bottom = this.getBottom(),\n\t top = this.getTop(),\n\t left = this.getLeft();\n\t\n\t var symbolX = symbol.getCenter().x,\n\t symbolY = symbol.getCenter().y,\n\t symbolTop = symbol.getTop(),\n\t symbolRight = symbol.getRight(),\n\t symbolLeft = symbol.getLeft();\n\t\n\t var isOnSameColumn = x === symbolX,\n\t isOnSameLine = y === symbolY,\n\t isUnder = y < symbolY,\n\t isUpper = y > symbolY || this === symbol,\n\t isLeft = x > symbolX,\n\t isRight = x < symbolX;\n\t\n\t var maxX = 0,\n\t line,\n\t yOffset,\n\t lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t if (symbol.topLines.length === 0 && this.bottomLines.length === 0) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\n\t } else {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t line = drawLine(this.chart, bottom, [\n\t {x: symbolTop.x, y: symbolTop.y - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n\t if (symbol.leftLines.length === 0 && this.rightLines.length === 0) {\n\t line = drawLine(this.chart, right, symbolLeft, text);\n\t } else {\n\t yOffset = Math.max(symbol.leftLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x, y: right.y - yOffset},\n\t {x: right.x, y: symbolLeft.y - yOffset},\n\t {x: symbolLeft.x, y: symbolLeft.y - yOffset},\n\t {x: symbolLeft.x, y: symbolLeft.y}\n\t ], text);\n\t }\n\t this.rightLines.push(line);\n\t symbol.leftLines.push(line);\n\t this.rightStart = true;\n\t symbol.leftEnd = true;\n\t maxX = symbolLeft.x;\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n\t if (symbol.rightLines.length === 0 && this.leftLines.length === 0) {\n\t line = drawLine(this.chart, left, symbolRight, text);\n\t } else {\n\t yOffset = Math.max(symbol.rightLines.length, this.leftLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x, y: right.y - yOffset},\n\t {x: right.x, y: symbolRight.y - yOffset},\n\t {x: symbolRight.x, y: symbolRight.y - yOffset},\n\t {x: symbolRight.x, y: symbolRight.y}\n\t ], text);\n\t }\n\t this.leftLines.push(line);\n\t symbol.rightLines.push(line);\n\t this.leftStart = true;\n\t symbol.rightEnd = true;\n\t maxX = symbolRight.x;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n\t yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y - yOffset},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightLines.push(line);\n\t symbol.topLines.push(line);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n\t yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y - yOffset},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightLines.push(line);\n\t symbol.topLines.push(line);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2 - yOffset},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t } else {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((!origin || origin === 'bottom') && isRight && isUnder) {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t if (symbolTop.x > maxX) maxX = symbolTop.x;\n\t } else if ((!origin || origin === 'bottom') && isRight) {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2 - yOffset},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((origin && origin === 'right') && isLeft) {\n\t yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightLines.push(line);\n\t symbol.topLines.push(line);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'right') && isRight) {\n\t yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - yOffset}\n\t ], text);\n\t this.rightLines.push(line);\n\t symbol.topLines.push(line);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2 - yOffset},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + lineLength/2;\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n\t var diffX = left.x - lineLength/2;\n\t if (symbolLeft.x < left.x) {\n\t diffX = symbolLeft.x - lineLength/2;\n\t }\n\t yOffset = Math.max(symbol.topLines.length, this.leftLines.length) * 10;\n\t line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y - yOffset},\n\t {x: diffX, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftLines.push(line);\n\t symbol.topLines.push(line);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\n\t yOffset = Math.max(symbol.topLines.length, this.leftLines.length) * 10;\n\t line = drawLine(this.chart, left, [\n\t {x: symbolTop.x + (left.x - symbolTop.x)/2, y: left.y},\n\t {x: symbolTop.x + (left.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftLines.push(line);\n\t symbol.topLines.push(line);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'top')) {\n\t yOffset = Math.max(symbol.topLines.length, this.topLines.length) * 10;\n\t line = drawLine(this.chart, top, [\n\t {x: top.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.topLines.push(line);\n\t symbol.topLines.push(line);\n\t this.topStart = true;\n\t symbol.topEnd = true;\n\t maxX = top.x;\n\t }\n\t\n\t //update line style\n\t if (this.lineStyle[symbol.key] && line){\n\t line.attr(this.lineStyle[symbol.key]);\n\t }\n\t\n\t if (line) {\n\t for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n\t var otherLine = this.chart.lines[l];\n\t\n\t var ePath = otherLine.attr('path'),\n\t lPath = line.attr('path');\n\t\n\t for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n\t var newPath = [];\n\t newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n\t newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\t\n\t var line1_from_x = newPath[0][1];\n\t var line1_from_y = newPath[0][2];\n\t var line1_to_x = newPath[1][1];\n\t var line1_to_y = newPath[1][2];\n\t\n\t for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n\t var newLinePath = [];\n\t newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n\t newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\t\n\t var line2_from_x = newLinePath[0][1];\n\t var line2_from_y = newLinePath[0][2];\n\t var line2_to_x = newLinePath[1][1];\n\t var line2_to_y = newLinePath[1][2];\n\t\n\t var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n\t if (res.onLine1 && res.onLine2) {\n\t\n\t var newSegment;\n\t if (line2_from_y === line2_to_y) {\n\t if (line2_from_x > line2_to_x) {\n\t newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t } else {\n\t if (line2_from_y > line2_to_y) {\n\t newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t }\n\t\n\t lP += 2;\n\t }\n\t }\n\t }\n\t }\n\t\n\t this.chart.lines.push(line);\n\t if (this.chart.minXFromSymbols === undefined || this.chart.minXFromSymbols > left.x) {\n\t this.chart.minXFromSymbols = left.x;\n\t }\n\t }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ }),\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ (function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t var textAnchor = 'start';\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t if (from.x > firstTo.x) {\n\t x -= chart.options['text-margin']/2;\n\t textAnchor = 'end';\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t }\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t if (from.y > firstTo.y) {\n\t y -= chart.options['text-margin']*2;\n\t }\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': textAnchor,\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ }),\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 7);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 13);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 10);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 12);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 11);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 14);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\tvar Parallel = __webpack_require__(/*! ./flowchart.symbol.parallel */ 6);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s);\n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t case 'parallel':\n\t dispSymbols[s.key] = new Parallel(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else if (prevDisp instanceof(Parallel)) {\n\t if (prev.path1 === s) {\n\t prevDisp.path1(dispSymb);\n\t }\n\t if (prev.path2 === s) {\n\t prevDisp.path2(dispSymb);\n\t }\n\t if (prev.path3 === s) {\n\t prevDisp.path3(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (dispSymb instanceof(Parallel)) {\n\t if (s.path1) {\n\t constructChart(s.path1, dispSymb, s);\n\t }\n\t if (s.path2) {\n\t constructChart(s.path2, dispSymb, s);\n\t }\n\t if (s.path3) {\n\t constructChart(s.path3, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t },\n\t options: function() {\n\t return this.diagram.options;\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if (prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getStyle(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '{}';\n\t }\n\t\n\t function getSymbValue(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '';\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)];\n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t \n\t function getAnnotation(s) {\n\t\tvar startIndex = s.indexOf(\"(\") + 1, endIndex = s.indexOf(\")\");\n\t\tvar tmp = s.substring(startIndex, endIndex);\n\t\tif(tmp.indexOf(\",\") > 0) { tmp = tmp.substring(0, tmp.indexOf(\",\")); }\n\t\tvar tmp_split = tmp.split(\"@\");\n\t\tif(tmp_split.length > 1)\n\t\t\treturn startIndex >= 0 && endIndex >= 0 ? tmp_split[1] : \"\";\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0].trim();\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0].replace(/\\(.*\\)/, ''),\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null,\n\t function: null,\n\t lineStyle: {},\n\t params: {}\n\t };\n\t\n\t //parse parameters\n\t var params = parts[0].match(/\\((.*)\\)/);\n\t if (params && params.length > 1){\n\t var entries = params[1].split(',');\n\t for(var i = 0; i < entries.length; i++) {\n\t var entry = entries[i].split('=');\n\t if (entry.length == 2) {\n\t symbol.params[entry[0]] = entry[1];\n\t }\n\t }\n\t }\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':$') >= 0) {\n\t sub = symbol.text.split(':$');\n\t symbol.text = sub.shift();\n\t symbol.function = sub.join(':$');\n\t } else if (symbol.symbolType.indexOf(':$') >= 0) {\n\t sub = symbol.symbolType.split(':$');\n\t symbol.symbolType = sub.shift();\n\t symbol.function = sub.join(':$');\n\t } else if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t var ann = getAnnotation(line);\n\t if (ann) {\n\t line = line.replace('@' + ann, ''); \n\t }\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var iS = 0, lenS = flowSymbols.length; iS < lenS; iS++) {\n\t var flowSymb = flowSymbols[iS];\n\t var symbVal = getSymbValue(flowSymb);\n\t\n\t if (symbVal === 'true' || symbVal === 'false') {\n\t // map true or false to yes or no respectively\n\t flowSymb = flowSymb.replace('true', 'yes');\n\t flowSymb = flowSymb.replace('false', 'no');\n\t }\n\t \n\t var next = getNextPath(flowSymb);\n\t var realSymb = getSymbol(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (ann) {\n\t if (next == \"yes\" || next == \"true\")\n\t realSymb.yes_annotation = ann;\n\t else\n\t realSymb.no_annotation = ann;\n\t ann = null;\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (iS + 1 < lenS) {\n\t var nextSymb = flowSymbols[iS + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t } else if (line.indexOf('@>') >= 0) {\n\t\n\t // line style\n\t var lineStyleSymbols = line.split('@>');\n\t for (var iSS = 0, lenSS = lineStyleSymbols.length; iSS < lenSS; iSS++) {\n\t if ((iSS + 1) !== lenSS) {\n\t var curSymb = getSymbol(lineStyleSymbols[iSS]);\n\t var nextSymbol = getSymbol(lineStyleSymbols[iSS+1]);\n\t\n\t curSymb['lineStyle'][nextSymbol.key] = JSON.parse(getStyle(lineStyleSymbols[iSS + 1]));\n\t }\n\t }\n\t }\n\t\n\t }\n\t return chart;\n\t}\n\t\n\tmodule.exports = parse;\n\n\n/***/ }),\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction Condition(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.yes_annotation = options.yes_annotation;\n\t this.no_annotation = options.no_annotation;\n\t this.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = options.direction_yes;\n\t this.no_direction = options.direction_no;\n\t this.params = options.params;\n\t if (!this.no_direction && this.yes_direction === 'right') {\n\t this.no_direction = 'bottom';\n\t } else if (!this.yes_direction && this.no_direction === 'bottom') {\n\t this.yes_direction = 'right'\n\t }\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.right_symbol.symbolType === 'end') return;\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t \n\t if (this.left_symbol) {\n\t var leftPoint = this.getLeft();\n\t \n\t if (!this.left_symbol.isPositioned) {\n\t this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n\t this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t \n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t \n\t if (hasSymbolUnder) {\n\t if (self.left_symbol.symbolType === 'end') return;\n\t self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t \n\t this.left_symbol.isPositioned = true;\n\t \n\t this.left_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.yes_annotation ? this.yes_annotation : this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.no_annotation ? this.no_annotation : this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ }),\n/* 6 */\n/*!******************************************!*\\\n !*** ./src/flowchart.symbol.parallel.js ***!\n \\******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Parallel(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t this.params = options.params;\n\t if (options.direction_next === 'path1' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path2' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path3' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t\n\t if (options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path1 === 'right') {\n\t this.path2_direction = 'bottom';\n\t this.path1_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path1 === 'top') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'top';\n\t this.path3_direction = 'bottom';\n\t } else if (options.direction_path1 === 'left') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'left';\n\t this.path3_direction = 'bottom';\n\t } else {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'left';\n\t this.path3_direction = 'right';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'top';\n\t this.path3_direction = 'right';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'left';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else {\n\t this.path1_direction = options.direction_path1;\n\t this.path2_direction = options.direction_path2;\n\t this.path3_direction = options.direction_path3;\n\t }\n\t\n\t this.path1_direction = this.path1_direction || 'bottom';\n\t this.path2_direction = this.path2_direction || 'right';\n\t this.path3_direction = this.path3_direction || 'top';\n\t\n\t this.initialize();\n\t}\n\tinherits(Parallel, Symbol);\n\t\n\tParallel.prototype.render = function() {\n\t\n\t if (this.path1_direction) {\n\t this[this.path1_direction + '_symbol'] = this.path1_symbol;\n\t }\n\t\n\t if (this.path2_direction) {\n\t this[this.path2_direction + '_symbol'] = this.path2_symbol;\n\t }\n\t\n\t if (this.path3_direction) {\n\t this[this.path3_direction + '_symbol'] = this.path3_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.top_symbol) {\n\t var topPoint = this.getTop();\n\t\n\t if (!this.top_symbol.isPositioned) {\n\t this.top_symbol.shiftY(this.getY() - this.top_symbol.height - lineLength);\n\t this.top_symbol.setX(topPoint.x + this.top_symbol.width);\n\t this.top_symbol.isPositioned = true;\n\t\n\t this.top_symbol.render();\n\t }\n\t }\n\t\n\t var self = this;\n\t\n\t if (this.left_symbol) {\n\t var leftPoint = this.getLeft();\n\t\n\t if (!this.left_symbol.isPositioned) {\n\t this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n\t this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.left_symbol.symbolType === 'end') return;\n\t self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.left_symbol.isPositioned = true;\n\t\n\t this.left_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.right_symbol.symbolType === 'end') return;\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tParallel.prototype.renderLines = function() {\n\t if (this.path1_symbol) {\n\t this.drawLineTo(this.path1_symbol, '', this.path1_direction);\n\t }\n\t\n\t if (this.path2_symbol) {\n\t this.drawLineTo(this.path2_symbol, '', this.path2_direction);\n\t }\n\t\n\t if (this.path3_symbol) {\n\t this.drawLineTo(this.path3_symbol, '', this.path3_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Parallel;\n\n/***/ }),\n/* 7 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 16);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 8);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\tvar Parallel = __webpack_require__(/*! ./flowchart.symbol.parallel */ 6);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if (symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else if (symbol instanceof(Parallel)) {\n\t symbol.path1 = function(nextSymbol) {\n\t symbol.path1_symbol = nextSymbol;\n\t if (symbol.path2_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.path2 = function(nextSymbol) {\n\t symbol.path2_symbol = nextSymbol;\n\t if (symbol.path3_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.path3 = function(nextSymbol) {\n\t symbol.path3_symbol = nextSymbol;\n\t if (symbol.path1_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t minX = 0,\n\t minY = 0,\n\t symbol,\n\t line;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t var x;\n\t var y;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t var leftX = symbol.getX()\n\t x = leftX + symbol.width;\n\t y = symbol.getY() + symbol.height;\n\t if (leftX < minX) {\n\t minX = leftX;\n\t }\n\t if (x > maxX) {\n\t maxX = x;\n\t }\n\t if (y > maxY) {\n\t maxY = y;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.lines.length; i < len; i++) {\n\t line = this.lines[i].getBBox();\n\t x = line.x;\n\t y = line.y;\n\t var x2 = line.x2;\n\t var y2 = line.y2;\n\t if (x < minX) {\n\t minX = x;\n\t }\n\t if (y < minY) {\n\t minY = y;\n\t }\n\t if (x2 > maxX) {\n\t maxX = x2;\n\t }\n\t if (y2 > maxY) {\n\t maxY = y2;\n\t }\n\t }\n\t\n\t var scale = this.options['scale'];\n\t var lineWidth = this.options['line-width'];\n\t\n\t if (this.minXFromSymbols < minX) minX = this.minXFromSymbols;\n\t\n\t if (minX < 0) minX -= lineWidth;\n\t if (minY < 0) minY -= lineWidth;\n\t\n\t var width = maxX + lineWidth - minX;\n\t var height = maxY + lineWidth - minY;\n\t\n\t this.paper.setSize(width * scale, height * scale);\n\t this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode && paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n/***/ }),\n/* 8 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ (function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {},\n\t 'parallel': {}\n\t } //,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n/***/ }),\n/* 9 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ (function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ }),\n/* 10 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ }),\n/* 11 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ }),\n/* 12 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ }),\n/* 13 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ }),\n/* 14 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ }),\n/* 15 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\n\t\t(function( $ ) {\n\t\t\tfunction paramFit(needle, haystack) {\n\t\t\t\treturn needle == haystack ||\n\t\t\t\t( Array.isArray(haystack) && (haystack.includes(needle) || haystack.includes(Number(needle)) ))\n\t\t\t}\n\t\t\tvar methods = {\n\t\t\t\tinit : function(options) {\n\t\t\t\t\treturn this.each(function() {\n\t\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\t\tthis.chart = parse($this.text());\n\t\t\t\t\t\t$this.html('');\n\t\t\t\t\t\tthis.chart.drawSVG(this, options);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tsetFlowStateByParam : function(param, paramValue, newFlowState) {\n\t\t\t\t\treturn this.each(function() {\n\t\t\t\t\t\tvar chart = this.chart;\n\t\n\t\t\t\t\t\t// @todo this should be part of Symbol API\n\t\t\t\t\t\tvar nextSymbolKeys = ['next', 'yes', 'no', 'path1', 'path2', 'path3'];\n\t\n\t\t\t\t\t\tfor (var property in chart.symbols) {\n\t\t\t\t\t\t\tif (chart.symbols.hasOwnProperty(property)) {\n\t\t\t\t\t\t\t\tvar symbol = chart.symbols[property];\n\t\t\t\t\t\t\t\tvar val = symbol.params[param];\n\t\t\t\t\t\t\t\tif (paramFit(val, paramValue)) {\n\t\t\t\t\t\t\t\t\tsymbol.flowstate = newFlowState;\n\t\t\t\t\t\t\t\t\tfor (var nski = 0; nski < nextSymbolKeys.length; nski++) {\n\t\t\t\t\t\t\t\t\t\tvar nextSymbolKey = nextSymbolKeys[nski];\n\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey] &&\n\t\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey]['params'] &&\n\t\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey]['params'][param] &&\n\t\t\t\t\t\t\t\t\t\t\tparamFit(symbol[nextSymbolKey]['params'][param], paramValue)\n\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\tsymbol.lineStyle[symbol[nextSymbolKey]['key']] = {stroke: chart.options()['flowstate'][newFlowState]['fill']};\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tchart.clean();\n\t\t\t\t\t\tchart.drawSVG(this);\n\t\t\t\t\t});\n\t\n\t\t\t\t},\n\t\t\t\tclearFlowState: function () {\n\t\t\t\t\treturn this.each(function() {\n\t\t\t\t\t\tvar chart = this.chart;\n\t\n\t\t\t\t\t\tfor (var property in chart.symbols) {\n\t\t\t\t\t\t\tif (chart.symbols.hasOwnProperty(property)) {\n\t\t\t\t\t\t\t\tvar node = chart.symbols[property];\n\t\t\t\t\t\t\t\tnode.flowstate = '';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tchart.clean();\n\t\t\t\t\t\tchart.drawSVG(this);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t\t$.fn.flowChart = function(methodOrOptions) {\n\t\t\t\tif ( methods[methodOrOptions] ) {\n\t\t\t\t\treturn methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 ));\n\t\t\t\t} else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ) {\n\t\t\t\t\t// Default to \"init\"\n\t\t\t\t\treturn methods.init.apply( this, arguments );\n\t\t\t\t} else {\n\t\t\t\t\t$.error( 'Method ' + methodOrOptions + ' does not exist on jQuery.flowChart' );\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ }),\n/* 16 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ (function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// flowchart.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 4f3ba54055edd874e520","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./index.js\n// module id = 0\n// module chunks = 0","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.helpers.js\n// module id = 1\n// module chunks = 0","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n this.lineStyle = (options.lineStyle || {});\n this.key = (options.key || '');\n this.leftLines = [];\n this.rightLines = [];\n this.topLines = [];\n this.bottomLines = [];\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n \n //ndrqu Add click function with event and options params\n if (options.function) { \n this.text.attr({ 'cursor' : 'pointer' });\n\n this.text.node.addEventListener(\"click\", function(evt) {\n window[options.function](evt,options);\n }, false);\n }\n \n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n\n //ndrqu Add click function with event and options params\n if (options.function) { \n symbol.node.addEventListener(\"click\", function(evt) {\n window[options.function](evt,options);\n }, false);\n symbol.attr({ 'cursor' : 'pointer' });\n }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var self = this;\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n if (self.next.symbolType === 'end') return;\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else if (this.next_direction === 'left') {\n\n var leftPoint = this.getLeft();\n\n if (!this.next.isPositioned) {\n this.next.setY(leftPoint.y - this.next.height/2);\n this.next.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n if (self.next.symbolType === 'end') return;\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, this.getAttr('arrow-text') || '', this.next_direction);\n } else {\n this.drawLineTo(this.next, this.getAttr('arrow-text') || '');\n }\n }\n};\n\nSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n if (this.connectedTo.indexOf(symbol) < 0) {\n this.connectedTo.push(symbol);\n }\n\n var x = this.getCenter().x,\n y = this.getCenter().y,\n right = this.getRight(),\n bottom = this.getBottom(),\n top = this.getTop(),\n left = this.getLeft();\n\n var symbolX = symbol.getCenter().x,\n symbolY = symbol.getCenter().y,\n symbolTop = symbol.getTop(),\n symbolRight = symbol.getRight(),\n symbolLeft = symbol.getLeft();\n\n var isOnSameColumn = x === symbolX,\n isOnSameLine = y === symbolY,\n isUnder = y < symbolY,\n isUpper = y > symbolY || this === symbol,\n isLeft = x > symbolX,\n isRight = x < symbolX;\n\n var maxX = 0,\n line,\n yOffset,\n lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n if (symbol.topLines.length === 0 && this.bottomLines.length === 0) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n } else {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n line = drawLine(this.chart, bottom, [\n {x: symbolTop.x, y: symbolTop.y - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n if (symbol.leftLines.length === 0 && this.rightLines.length === 0) {\n line = drawLine(this.chart, right, symbolLeft, text);\n } else {\n yOffset = Math.max(symbol.leftLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x, y: right.y - yOffset},\n {x: right.x, y: symbolLeft.y - yOffset},\n {x: symbolLeft.x, y: symbolLeft.y - yOffset},\n {x: symbolLeft.x, y: symbolLeft.y}\n ], text);\n }\n this.rightLines.push(line);\n symbol.leftLines.push(line);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n if (symbol.rightLines.length === 0 && this.leftLines.length === 0) {\n line = drawLine(this.chart, left, symbolRight, text);\n } else {\n yOffset = Math.max(symbol.rightLines.length, this.leftLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x, y: right.y - yOffset},\n {x: right.x, y: symbolRight.y - yOffset},\n {x: symbolRight.x, y: symbolRight.y - yOffset},\n {x: symbolRight.x, y: symbolRight.y}\n ], text);\n }\n this.leftLines.push(line);\n symbol.rightLines.push(line);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y - yOffset},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightLines.push(line);\n symbol.topLines.push(line);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y - yOffset},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightLines.push(line);\n symbol.topLines.push(line);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2 - yOffset},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n } else {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((!origin || origin === 'bottom') && isRight && isUnder) {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n if (symbolTop.x > maxX) maxX = symbolTop.x;\n } else if ((!origin || origin === 'bottom') && isRight) {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2 - yOffset},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((origin && origin === 'right') && isLeft) {\n yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightLines.push(line);\n symbol.topLines.push(line);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y - yOffset},\n {x: symbolTop.x, y: symbolTop.y - yOffset}\n ], text);\n this.rightLines.push(line);\n symbol.topLines.push(line);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2 - yOffset},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + lineLength/2;\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n var diffX = left.x - lineLength/2;\n if (symbolLeft.x < left.x) {\n diffX = symbolLeft.x - lineLength/2;\n }\n yOffset = Math.max(symbol.topLines.length, this.leftLines.length) * 10;\n line = drawLine(this.chart, left, [\n {x: diffX, y: left.y - yOffset},\n {x: diffX, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftLines.push(line);\n symbol.topLines.push(line);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\n yOffset = Math.max(symbol.topLines.length, this.leftLines.length) * 10;\n line = drawLine(this.chart, left, [\n {x: symbolTop.x + (left.x - symbolTop.x)/2, y: left.y},\n {x: symbolTop.x + (left.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftLines.push(line);\n symbol.topLines.push(line);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'top')) {\n yOffset = Math.max(symbol.topLines.length, this.topLines.length) * 10;\n line = drawLine(this.chart, top, [\n {x: top.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.topLines.push(line);\n symbol.topLines.push(line);\n this.topStart = true;\n symbol.topEnd = true;\n maxX = top.x;\n }\n\n //update line style\n if (this.lineStyle[symbol.key] && line){\n line.attr(this.lineStyle[symbol.key]);\n }\n\n if (line) {\n for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n var otherLine = this.chart.lines[l];\n\n var ePath = otherLine.attr('path'),\n lPath = line.attr('path');\n\n for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n var newPath = [];\n newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\n var line1_from_x = newPath[0][1];\n var line1_from_y = newPath[0][2];\n var line1_to_x = newPath[1][1];\n var line1_to_y = newPath[1][2];\n\n for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n var newLinePath = [];\n newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\n var line2_from_x = newLinePath[0][1];\n var line2_from_y = newLinePath[0][2];\n var line2_to_x = newLinePath[1][1];\n var line2_to_y = newLinePath[1][2];\n\n var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n if (res.onLine1 && res.onLine2) {\n\n var newSegment;\n if (line2_from_y === line2_to_y) {\n if (line2_from_x > line2_to_x) {\n newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n } else {\n if (line2_from_y > line2_to_y) {\n newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n }\n\n lP += 2;\n }\n }\n }\n }\n\n this.chart.lines.push(line);\n if (this.chart.minXFromSymbols === undefined || this.chart.minXFromSymbols > left.x) {\n this.chart.minXFromSymbols = left.x;\n }\n }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.js\n// module id = 2\n// module chunks = 0","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n var textAnchor = 'start';\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n if (from.x > firstTo.x) {\n x -= chart.options['text-margin']/2;\n textAnchor = 'end';\n } else {\n x += chart.options['text-margin']/2;\n }\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n if (from.y > firstTo.y) {\n y -= chart.options['text-margin']*2;\n }\n }\n }\n\n textPath.attr({\n 'text-anchor': textAnchor,\n 'font-size': chart.options['font-size'],\n 'fill': chart.options['font-color'],\n x: x,\n y: y\n });\n\n if (font) textPath.attr({ 'font': font });\n if (fontF) textPath.attr({ 'font-family': fontF });\n if (fontW) textPath.attr({ 'font-weight': fontW });\n }\n\n return line;\n}\n\nfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n var denominator, a, b, numerator1, numerator2, result = {\n x: null,\n y: null,\n onLine1: false,\n onLine2: false\n };\n denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n if (denominator === 0) {\n return result;\n }\n a = line1StartY - line2StartY;\n b = line1StartX - line2StartX;\n numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n a = numerator1 / denominator;\n b = numerator2 / denominator;\n\n // if we cast these lines infinitely in both directions, they intersect here:\n result.x = line1StartX + (a * (line1EndX - line1StartX));\n result.y = line1StartY + (a * (line1EndY - line1StartY));\n /*\n // it is worth noting that this should be the same as:\n x = line2StartX + (b * (line2EndX - line2StartX));\n y = line2StartX + (b * (line2EndY - line2StartY));\n */\n // if line1 is a segment and line2 is infinite, they intersect if:\n if (a > 0 && a < 1) {\n result.onLine1 = true;\n }\n // if line2 is a segment and line1 is infinite, they intersect if:\n if (b > 0 && b < 1) {\n result.onLine2 = true;\n }\n // if line1 and line2 are segments, they intersect if both of the above are true\n return result;\n}\n\nmodule.exports = {\n\tdrawPath: drawPath,\n\tdrawLine: drawLine,\n\tcheckLineIntersection: checkLineIntersection\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.functions.js\n// module id = 3\n// module chunks = 0","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\nvar Parallel = require('./flowchart.symbol.parallel');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s);\n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n case 'parallel':\n dispSymbols[s.key] = new Parallel(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else if (prevDisp instanceof(Parallel)) {\n if (prev.path1 === s) {\n prevDisp.path1(dispSymb);\n }\n if (prev.path2 === s) {\n prevDisp.path2(dispSymb);\n }\n if (prev.path3 === s) {\n prevDisp.path3(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (dispSymb instanceof(Parallel)) {\n if (s.path1) {\n constructChart(s.path1, dispSymb, s);\n }\n if (s.path2) {\n constructChart(s.path2, dispSymb, s);\n }\n if (s.path3) {\n constructChart(s.path3, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n },\n options: function() {\n return this.diagram.options;\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if (prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getStyle(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '{}';\n }\n\n function getSymbValue(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '';\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)];\n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n \n function getAnnotation(s) {\n\tvar startIndex = s.indexOf(\"(\") + 1, endIndex = s.indexOf(\")\");\n\tvar tmp = s.substring(startIndex, endIndex);\n\tif(tmp.indexOf(\",\") > 0) { tmp = tmp.substring(0, tmp.indexOf(\",\")); }\n\tvar tmp_split = tmp.split(\"@\");\n\tif(tmp_split.length > 1)\n\t\treturn startIndex >= 0 && endIndex >= 0 ? tmp_split[1] : \"\";\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0].trim();\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0].replace(/\\(.*\\)/, ''),\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null,\n function: null,\n lineStyle: {},\n params: {}\n };\n\n //parse parameters\n var params = parts[0].match(/\\((.*)\\)/);\n if (params && params.length > 1){\n var entries = params[1].split(',');\n for(var i = 0; i < entries.length; i++) {\n var entry = entries[i].split('=');\n if (entry.length == 2) {\n symbol.params[entry[0]] = entry[1];\n }\n }\n }\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':$') >= 0) {\n sub = symbol.text.split(':$');\n symbol.text = sub.shift();\n symbol.function = sub.join(':$');\n } else if (symbol.symbolType.indexOf(':$') >= 0) {\n sub = symbol.symbolType.split(':$');\n symbol.symbolType = sub.shift();\n symbol.function = sub.join(':$');\n } else if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n var ann = getAnnotation(line);\n if (ann) {\n line = line.replace('@' + ann, ''); \n }\n // flow\n var flowSymbols = line.split('->');\n for (var iS = 0, lenS = flowSymbols.length; iS < lenS; iS++) {\n var flowSymb = flowSymbols[iS];\n var symbVal = getSymbValue(flowSymb);\n\n if (symbVal === 'true' || symbVal === 'false') {\n // map true or false to yes or no respectively\n flowSymb = flowSymb.replace('true', 'yes');\n flowSymb = flowSymb.replace('false', 'no');\n }\n \n var next = getNextPath(flowSymb);\n var realSymb = getSymbol(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (ann) {\n if (next == \"yes\" || next == \"true\")\n realSymb.yes_annotation = ann;\n else\n realSymb.no_annotation = ann;\n ann = null;\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (iS + 1 < lenS) {\n var nextSymb = flowSymbols[iS + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n } else if (line.indexOf('@>') >= 0) {\n\n // line style\n var lineStyleSymbols = line.split('@>');\n for (var iSS = 0, lenSS = lineStyleSymbols.length; iSS < lenSS; iSS++) {\n if ((iSS + 1) !== lenSS) {\n var curSymb = getSymbol(lineStyleSymbols[iSS]);\n var nextSymbol = getSymbol(lineStyleSymbols[iSS+1]);\n\n curSymb['lineStyle'][nextSymbol.key] = JSON.parse(getStyle(lineStyleSymbols[iSS + 1]));\n }\n }\n }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.parse.js\n// module id = 4\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.yes_annotation = options.yes_annotation;\n this.no_annotation = options.no_annotation;\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = options.direction_yes;\n this.no_direction = options.direction_no;\n this.params = options.params;\n if (!this.no_direction && this.yes_direction === 'right') {\n this.no_direction = 'bottom';\n } else if (!this.yes_direction && this.no_direction === 'bottom') {\n this.yes_direction = 'right'\n }\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n if (self.right_symbol.symbolType === 'end') return;\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n \n if (this.left_symbol) {\n var leftPoint = this.getLeft();\n \n if (!this.left_symbol.isPositioned) {\n this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n \n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n \n if (hasSymbolUnder) {\n if (self.left_symbol.symbolType === 'end') return;\n self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n \n this.left_symbol.isPositioned = true;\n \n this.left_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.yes_annotation ? this.yes_annotation : this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.no_annotation ? this.no_annotation : this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.condition.js\n// module id = 5\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Parallel(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n this.textMargin = this.getAttr('text-margin');\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'top';\n this.params = options.params;\n if (options.direction_next === 'path1' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n if (options.direction_next === 'path2' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n if (options.direction_next === 'path3' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n\n if (options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3) {\n if (options.direction_path1 === 'right') {\n this.path2_direction = 'bottom';\n this.path1_direction = 'right';\n this.path3_direction = 'top';\n } else if (options.direction_path1 === 'top') {\n this.path2_direction = 'right';\n this.path1_direction = 'top';\n this.path3_direction = 'bottom';\n } else if (options.direction_path1 === 'left') {\n this.path2_direction = 'right';\n this.path1_direction = 'left';\n this.path3_direction = 'bottom';\n } else {\n this.path2_direction = 'right';\n this.path1_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else if (options.path1 && !options.direction_path1 && options.path2 && options.direction_path2 && options.path3 && !options.direction_path3) {\n if (options.direction_path2 === 'right') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'top';\n } else if (options.direction_path2 === 'left') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'left';\n this.path3_direction = 'right';\n } else {\n this.path1_direction = 'right';\n this.path2_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else if (options.path1 && !options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && options.direction_path3) {\n if (options.direction_path2 === 'right') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'top';\n this.path3_direction = 'right';\n } else if (options.direction_path2 === 'left') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'left';\n } else {\n this.path1_direction = 'right';\n this.path2_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else {\n this.path1_direction = options.direction_path1;\n this.path2_direction = options.direction_path2;\n this.path3_direction = options.direction_path3;\n }\n\n this.path1_direction = this.path1_direction || 'bottom';\n this.path2_direction = this.path2_direction || 'right';\n this.path3_direction = this.path3_direction || 'top';\n\n this.initialize();\n}\ninherits(Parallel, Symbol);\n\nParallel.prototype.render = function() {\n\n if (this.path1_direction) {\n this[this.path1_direction + '_symbol'] = this.path1_symbol;\n }\n\n if (this.path2_direction) {\n this[this.path2_direction + '_symbol'] = this.path2_symbol;\n }\n\n if (this.path3_direction) {\n this[this.path3_direction + '_symbol'] = this.path3_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.top_symbol) {\n var topPoint = this.getTop();\n\n if (!this.top_symbol.isPositioned) {\n this.top_symbol.shiftY(this.getY() - this.top_symbol.height - lineLength);\n this.top_symbol.setX(topPoint.x + this.top_symbol.width);\n this.top_symbol.isPositioned = true;\n\n this.top_symbol.render();\n }\n }\n\n var self = this;\n\n if (this.left_symbol) {\n var leftPoint = this.getLeft();\n\n if (!this.left_symbol.isPositioned) {\n this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n if (self.left_symbol.symbolType === 'end') return;\n self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.left_symbol.isPositioned = true;\n\n this.left_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n if (self.right_symbol.symbolType === 'end') return;\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nParallel.prototype.renderLines = function() {\n if (this.path1_symbol) {\n this.drawLineTo(this.path1_symbol, '', this.path1_direction);\n }\n\n if (this.path2_symbol) {\n this.drawLineTo(this.path2_symbol, '', this.path2_direction);\n }\n\n if (this.path3_symbol) {\n this.drawLineTo(this.path3_symbol, '', this.path3_direction);\n }\n};\n\nmodule.exports = Parallel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.parallel.js\n// module id = 6\n// module chunks = 0","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\nvar Parallel = require('./flowchart.symbol.parallel');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if (symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else if (symbol instanceof(Parallel)) {\n symbol.path1 = function(nextSymbol) {\n symbol.path1_symbol = nextSymbol;\n if (symbol.path2_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.path2 = function(nextSymbol) {\n symbol.path2_symbol = nextSymbol;\n if (symbol.path3_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.path3 = function(nextSymbol) {\n symbol.path3_symbol = nextSymbol;\n if (symbol.path1_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n minX = 0,\n minY = 0,\n symbol,\n line;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n var x;\n var y;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n var leftX = symbol.getX()\n x = leftX + symbol.width;\n y = symbol.getY() + symbol.height;\n if (leftX < minX) {\n minX = leftX;\n }\n if (x > maxX) {\n maxX = x;\n }\n if (y > maxY) {\n maxY = y;\n }\n }\n\n for (i = 0, len = this.lines.length; i < len; i++) {\n line = this.lines[i].getBBox();\n x = line.x;\n y = line.y;\n var x2 = line.x2;\n var y2 = line.y2;\n if (x < minX) {\n minX = x;\n }\n if (y < minY) {\n minY = y;\n }\n if (x2 > maxX) {\n maxX = x2;\n }\n if (y2 > maxY) {\n maxY = y2;\n }\n }\n\n var scale = this.options['scale'];\n var lineWidth = this.options['line-width'];\n\n if (this.minXFromSymbols < minX) minX = this.minXFromSymbols;\n\n if (minX < 0) minX -= lineWidth;\n if (minY < 0) minY -= lineWidth;\n\n var width = maxX + lineWidth - minX;\n var height = maxY + lineWidth - minY;\n\n this.paper.setSize(width * scale, height * scale);\n this.paper.setViewBox(minX, minY, width, height, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode && paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.chart.js\n// module id = 7\n// module chunks = 0","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {},\n 'parallel': {}\n } //,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.defaults.js\n// module id = 8\n// module chunks = 0","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.shim.js\n// module id = 9\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.end.js\n// module id = 10\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.inputoutput.js\n// module id = 11\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.operation.js\n// module id = 12\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.start.js\n// module id = 13\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.subroutine.js\n// module id = 14\n// module chunks = 0","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\n\t(function( $ ) {\n\t\tfunction paramFit(needle, haystack) {\n\t\t\treturn needle == haystack ||\n\t\t\t( Array.isArray(haystack) && (haystack.includes(needle) || haystack.includes(Number(needle)) ))\n\t\t}\n\t\tvar methods = {\n\t\t\tinit : function(options) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tthis.chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tthis.chart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t},\n\t\t\tsetFlowStateByParam : function(param, paramValue, newFlowState) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar chart = this.chart;\n\n\t\t\t\t\t// @todo this should be part of Symbol API\n\t\t\t\t\tvar nextSymbolKeys = ['next', 'yes', 'no', 'path1', 'path2', 'path3'];\n\n\t\t\t\t\tfor (var property in chart.symbols) {\n\t\t\t\t\t\tif (chart.symbols.hasOwnProperty(property)) {\n\t\t\t\t\t\t\tvar symbol = chart.symbols[property];\n\t\t\t\t\t\t\tvar val = symbol.params[param];\n\t\t\t\t\t\t\tif (paramFit(val, paramValue)) {\n\t\t\t\t\t\t\t\tsymbol.flowstate = newFlowState;\n\t\t\t\t\t\t\t\tfor (var nski = 0; nski < nextSymbolKeys.length; nski++) {\n\t\t\t\t\t\t\t\t\tvar nextSymbolKey = nextSymbolKeys[nski];\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey] &&\n\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey]['params'] &&\n\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey]['params'][param] &&\n\t\t\t\t\t\t\t\t\t\tparamFit(symbol[nextSymbolKey]['params'][param], paramValue)\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tsymbol.lineStyle[symbol[nextSymbolKey]['key']] = {stroke: chart.options()['flowstate'][newFlowState]['fill']};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tchart.clean();\n\t\t\t\t\tchart.drawSVG(this);\n\t\t\t\t});\n\n\t\t\t},\n\t\t\tclearFlowState: function () {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar chart = this.chart;\n\n\t\t\t\t\tfor (var property in chart.symbols) {\n\t\t\t\t\t\tif (chart.symbols.hasOwnProperty(property)) {\n\t\t\t\t\t\t\tvar node = chart.symbols[property];\n\t\t\t\t\t\t\tnode.flowstate = '';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tchart.clean();\n\t\t\t\t\tchart.drawSVG(this);\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\t$.fn.flowChart = function(methodOrOptions) {\n\t\t\tif ( methods[methodOrOptions] ) {\n\t\t\t\treturn methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 ));\n\t\t\t} else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ) {\n\t\t\t\t// Default to \"init\"\n\t\t\t\treturn methods.init.apply( this, arguments );\n\t\t\t} else {\n\t\t\t\t$.error( 'Method ' + methodOrOptions + ' does not exist on jQuery.flowChart' );\n\t\t\t}\n\t\t};\n\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/jquery-plugin.js\n// module id = 15\n// module chunks = 0","module.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"Raphael\"\n// module id = 16\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.js","webpack:///webpack/bootstrap 741234b9605c2cc42761","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.symbol.parallel.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_16__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","lineStyle","key","leftLines","rightLines","topLines","bottomLines","params","next_direction","next","undefined","text","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","function","cursor","addEventListener","evt","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","self","lineLength","rightPoint","isPositioned","shift","symb","hasSymbolUnder","len","diff","Math","abs","leftPoint","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","yOffset","right","bottom","top","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","max","rightStart","topEnd","bottomStart","diffX","leftStart","topStart","leftEnd","rightEnd","l","llen","lines","otherLine","ePath","lPath","iP","lenP","newPath","line1_from_x","line1_from_y","line1_to_x","line1_to_y","lP","lenlP","newLinePath","line2_from_x","line2_from_y","line2_to_x","line2_to_y","res","onLine1","onLine2","newSegment","splice","minXFromSymbols","maxXFromLine","drawPath","location","points","path","pathValues","from","to","toString","arrow-end","centerText","textPath","textAnchor","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getStyle","s","startIndex","endIndex","getSymbValue","getSymbol","getNextPath","flowSymb","getAnnotation","tmp","tmp_split","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Parallel","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","path1","path2","path3","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","parts","match","entries","entry","sub","join","txtAndState","pop","ann","flowSymbols","iS","lenS","symbVal","realSymb","direction","condOpt","yes_annotation","no_annotation","path1_annotation","path2_annotation","path3_annotation","nextSymb","lineStyleSymbols","iSS","lenSS","curSymb","nextSymbol","JSON","textMargin","yes_direction","direction_yes","no_direction","direction_no","startX","startY","yes_symbol","no_symbol","bottom_symbol","right_symbol","left_symbol","rect","path1_direction","path2_direction","path3_direction","direction_next","direction_path1","direction_path2","direction_path3","path1_symbol","path2_symbol","path3_symbol","top_symbol","topPoint","Raphael","handle","flowChart","maxHeight","maxY","minX","minY","leftX","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","parallel","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","innerWrap","jQuery","$","paramFit","needle","haystack","isArray","includes","methods","init","each","$this","html","setFlowStateByParam","param","paramValue","newFlowState","nextSymbolKeys","property","hasOwnProperty","val","nski","nextSymbolKey","clearFlowState","fn","methodOrOptions","apply","slice","error"],"mappings":"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","file":"flowchart.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_16__) {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_16__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 9);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 15);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ }),\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ (function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ }),\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t this.lineStyle = (options.lineStyle || {});\n\t this.key = (options.key || '');\n\t this.leftLines = [];\n\t this.rightLines = [];\n\t this.topLines = [];\n\t this.bottomLines = [];\n\t this.params = options.params;\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t \n\t //ndrqu Add click function with event and options params\n\t if (options.function) { \n\t this.text.attr({ 'cursor' : 'pointer' });\n\t\n\t this.text.node.addEventListener(\"click\", function(evt) {\n\t window[options.function](evt,options);\n\t }, false);\n\t }\n\t\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t\n\t //ndrqu Add click function with event and options params\n\t if (options.function) { \n\t symbol.node.addEventListener(\"click\", function(evt) {\n\t window[options.function](evt,options);\n\t }, false);\n\t symbol.attr({ 'cursor' : 'pointer' });\n\t }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var self = this;\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.next.symbolType === 'end') return;\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else if (this.next_direction === 'left') {\n\t\n\t var leftPoint = this.getLeft();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.setY(leftPoint.y - this.next.height/2);\n\t this.next.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.next.symbolType === 'end') return;\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, this.getAttr('arrow-text') || '', this.next_direction);\n\t } else {\n\t this.drawLineTo(this.next, this.getAttr('arrow-text') || '');\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n\t if (this.connectedTo.indexOf(symbol) < 0) {\n\t this.connectedTo.push(symbol);\n\t }\n\t\n\t var x = this.getCenter().x,\n\t y = this.getCenter().y,\n\t right = this.getRight(),\n\t bottom = this.getBottom(),\n\t top = this.getTop(),\n\t left = this.getLeft();\n\t\n\t var symbolX = symbol.getCenter().x,\n\t symbolY = symbol.getCenter().y,\n\t symbolTop = symbol.getTop(),\n\t symbolRight = symbol.getRight(),\n\t symbolLeft = symbol.getLeft();\n\t\n\t var isOnSameColumn = x === symbolX,\n\t isOnSameLine = y === symbolY,\n\t isUnder = y < symbolY,\n\t isUpper = y > symbolY || this === symbol,\n\t isLeft = x > symbolX,\n\t isRight = x < symbolX;\n\t\n\t var maxX = 0,\n\t line,\n\t yOffset,\n\t lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t if (symbol.topLines.length === 0 && this.bottomLines.length === 0) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\n\t } else {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t line = drawLine(this.chart, bottom, [\n\t {x: symbolTop.x, y: symbolTop.y - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n\t if (symbol.leftLines.length === 0 && this.rightLines.length === 0) {\n\t line = drawLine(this.chart, right, symbolLeft, text);\n\t } else {\n\t yOffset = Math.max(symbol.leftLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x, y: right.y - yOffset},\n\t {x: right.x, y: symbolLeft.y - yOffset},\n\t {x: symbolLeft.x, y: symbolLeft.y - yOffset},\n\t {x: symbolLeft.x, y: symbolLeft.y}\n\t ], text);\n\t }\n\t this.rightLines.push(line);\n\t symbol.leftLines.push(line);\n\t this.rightStart = true;\n\t symbol.leftEnd = true;\n\t maxX = symbolLeft.x;\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n\t if (symbol.rightLines.length === 0 && this.leftLines.length === 0) {\n\t line = drawLine(this.chart, left, symbolRight, text);\n\t } else {\n\t yOffset = Math.max(symbol.rightLines.length, this.leftLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x, y: right.y - yOffset},\n\t {x: right.x, y: symbolRight.y - yOffset},\n\t {x: symbolRight.x, y: symbolRight.y - yOffset},\n\t {x: symbolRight.x, y: symbolRight.y}\n\t ], text);\n\t }\n\t this.leftLines.push(line);\n\t symbol.rightLines.push(line);\n\t this.leftStart = true;\n\t symbol.rightEnd = true;\n\t maxX = symbolRight.x;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n\t yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y - yOffset},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightLines.push(line);\n\t symbol.topLines.push(line);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n\t yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y - yOffset},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightLines.push(line);\n\t symbol.topLines.push(line);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2 - yOffset},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t } else {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((!origin || origin === 'bottom') && isRight && isUnder) {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t if (symbolTop.x > maxX) maxX = symbolTop.x;\n\t } else if ((!origin || origin === 'bottom') && isRight) {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2 - yOffset},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((origin && origin === 'right') && isLeft) {\n\t yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightLines.push(line);\n\t symbol.topLines.push(line);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'right') && isRight) {\n\t yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - yOffset}\n\t ], text);\n\t this.rightLines.push(line);\n\t symbol.topLines.push(line);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2 - yOffset},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + lineLength/2;\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n\t var diffX = left.x - lineLength/2;\n\t if (symbolLeft.x < left.x) {\n\t diffX = symbolLeft.x - lineLength/2;\n\t }\n\t yOffset = Math.max(symbol.topLines.length, this.leftLines.length) * 10;\n\t line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y - yOffset},\n\t {x: diffX, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftLines.push(line);\n\t symbol.topLines.push(line);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\n\t yOffset = Math.max(symbol.topLines.length, this.leftLines.length) * 10;\n\t line = drawLine(this.chart, left, [\n\t {x: symbolTop.x + (left.x - symbolTop.x)/2, y: left.y},\n\t {x: symbolTop.x + (left.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftLines.push(line);\n\t symbol.topLines.push(line);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'top')) {\n\t yOffset = Math.max(symbol.topLines.length, this.topLines.length) * 10;\n\t line = drawLine(this.chart, top, [\n\t {x: top.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.topLines.push(line);\n\t symbol.topLines.push(line);\n\t this.topStart = true;\n\t symbol.topEnd = true;\n\t maxX = top.x;\n\t }\n\t\n\t //update line style\n\t if (this.lineStyle[symbol.key] && line){\n\t line.attr(this.lineStyle[symbol.key]);\n\t }\n\t\n\t if (line) {\n\t for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n\t var otherLine = this.chart.lines[l];\n\t\n\t var ePath = otherLine.attr('path'),\n\t lPath = line.attr('path');\n\t\n\t for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n\t var newPath = [];\n\t newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n\t newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\t\n\t var line1_from_x = newPath[0][1];\n\t var line1_from_y = newPath[0][2];\n\t var line1_to_x = newPath[1][1];\n\t var line1_to_y = newPath[1][2];\n\t\n\t for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n\t var newLinePath = [];\n\t newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n\t newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\t\n\t var line2_from_x = newLinePath[0][1];\n\t var line2_from_y = newLinePath[0][2];\n\t var line2_to_x = newLinePath[1][1];\n\t var line2_to_y = newLinePath[1][2];\n\t\n\t var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n\t if (res.onLine1 && res.onLine2) {\n\t\n\t var newSegment;\n\t if (line2_from_y === line2_to_y) {\n\t if (line2_from_x > line2_to_x) {\n\t newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t } else {\n\t if (line2_from_y > line2_to_y) {\n\t newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t }\n\t\n\t lP += 2;\n\t }\n\t }\n\t }\n\t }\n\t\n\t this.chart.lines.push(line);\n\t if (this.chart.minXFromSymbols === undefined || this.chart.minXFromSymbols > left.x) {\n\t this.chart.minXFromSymbols = left.x;\n\t }\n\t }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ }),\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ (function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t var textAnchor = 'start';\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t if (from.x > firstTo.x) {\n\t x -= chart.options['text-margin']/2;\n\t textAnchor = 'end';\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t }\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t if (from.y > firstTo.y) {\n\t y -= chart.options['text-margin']*2;\n\t }\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': textAnchor,\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ }),\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 7);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 13);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 10);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 12);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 11);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 14);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\tvar Parallel = __webpack_require__(/*! ./flowchart.symbol.parallel */ 6);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s);\n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t case 'parallel':\n\t dispSymbols[s.key] = new Parallel(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else if (prevDisp instanceof(Parallel)) {\n\t if (prev.path1 === s) {\n\t prevDisp.path1(dispSymb);\n\t }\n\t if (prev.path2 === s) {\n\t prevDisp.path2(dispSymb);\n\t }\n\t if (prev.path3 === s) {\n\t prevDisp.path3(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (dispSymb instanceof(Parallel)) {\n\t if (s.path1) {\n\t constructChart(s.path1, dispSymb, s);\n\t }\n\t if (s.path2) {\n\t constructChart(s.path2, dispSymb, s);\n\t }\n\t if (s.path3) {\n\t constructChart(s.path3, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t },\n\t options: function() {\n\t return this.diagram.options;\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if (prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getStyle(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '{}';\n\t }\n\t\n\t function getSymbValue(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '';\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)];\n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t \n\t function getAnnotation(s) {\n\t\tvar startIndex = s.indexOf(\"(\") + 1, endIndex = s.indexOf(\")\");\n\t\tvar tmp = s.substring(startIndex, endIndex);\n\t\tif(tmp.indexOf(\",\") > 0) { tmp = tmp.substring(0, tmp.indexOf(\",\")); }\n\t\tvar tmp_split = tmp.split(\"@\");\n\t\tif(tmp_split.length > 1)\n\t\t\treturn startIndex >= 0 && endIndex >= 0 ? tmp_split[1] : \"\";\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0].trim();\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0].replace(/\\(.*\\)/, ''),\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null,\n\t function: null,\n\t lineStyle: {},\n\t params: {}\n\t };\n\t\n\t //parse parameters\n\t var params = parts[0].match(/\\((.*)\\)/);\n\t if (params && params.length > 1){\n\t var entries = params[1].split(',');\n\t for(var i = 0; i < entries.length; i++) {\n\t var entry = entries[i].split('=');\n\t if (entry.length == 2) {\n\t symbol.params[entry[0]] = entry[1];\n\t }\n\t }\n\t }\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':$') >= 0) {\n\t sub = symbol.text.split(':$');\n\t symbol.text = sub.shift();\n\t symbol.function = sub.join(':$');\n\t } else if (symbol.symbolType.indexOf(':$') >= 0) {\n\t sub = symbol.symbolType.split(':$');\n\t symbol.symbolType = sub.shift();\n\t symbol.function = sub.join(':$');\n\t } else if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t var ann = getAnnotation(line);\n\t if (ann) {\n\t line = line.replace('@' + ann, ''); \n\t }\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var iS = 0, lenS = flowSymbols.length; iS < lenS; iS++) {\n\t var flowSymb = flowSymbols[iS];\n\t var symbVal = getSymbValue(flowSymb);\n\t\n\t if (symbVal === 'true' || symbVal === 'false') {\n\t // map true or false to yes or no respectively\n\t flowSymb = flowSymb.replace('true', 'yes');\n\t flowSymb = flowSymb.replace('false', 'no');\n\t }\n\t \n\t var next = getNextPath(flowSymb);\n\t var realSymb = getSymbol(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (ann) {\n\t if (realSymb.symbolType === 'condition') {\n\t if (next === \"yes\" || next === \"true\") {\n\t realSymb.yes_annotation = ann;\n\t } else {\n\t realSymb.no_annotation = ann;\n\t }\n\t } else if (realSymb.symbolType === 'parallel') {\n\t if (next === 'path1') {\n\t realSymb.path1_annotation = ann;\n\t } else if (next === 'path2') {\n\t realSymb.path2_annotation = ann;\n\t } else if (next === 'path3') {\n\t realSymb.path3_annotation = ann;\n\t }\n\t }\n\t ann = null;\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (iS + 1 < lenS) {\n\t var nextSymb = flowSymbols[iS + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t } else if (line.indexOf('@>') >= 0) {\n\t\n\t // line style\n\t var lineStyleSymbols = line.split('@>');\n\t for (var iSS = 0, lenSS = lineStyleSymbols.length; iSS < lenSS; iSS++) {\n\t if ((iSS + 1) !== lenSS) {\n\t var curSymb = getSymbol(lineStyleSymbols[iSS]);\n\t var nextSymbol = getSymbol(lineStyleSymbols[iSS+1]);\n\t\n\t curSymb['lineStyle'][nextSymbol.key] = JSON.parse(getStyle(lineStyleSymbols[iSS + 1]));\n\t }\n\t }\n\t }\n\t\n\t }\n\t return chart;\n\t}\n\t\n\tmodule.exports = parse;\n\n\n/***/ }),\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction Condition(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.yes_annotation = options.yes_annotation;\n\t this.no_annotation = options.no_annotation;\n\t this.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = options.direction_yes;\n\t this.no_direction = options.direction_no;\n\t if (!this.no_direction && this.yes_direction === 'right') {\n\t this.no_direction = 'bottom';\n\t } else if (!this.yes_direction && this.no_direction === 'bottom') {\n\t this.yes_direction = 'right'\n\t }\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t this.symbol = symbol\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t var self = this;\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.right_symbol.symbolType === 'end') return;\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t \n\t if (this.left_symbol) {\n\t var leftPoint = this.getLeft();\n\t \n\t if (!this.left_symbol.isPositioned) {\n\t this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n\t this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t \n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t \n\t if (hasSymbolUnder) {\n\t if (self.left_symbol.symbolType === 'end') return;\n\t self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t \n\t this.left_symbol.isPositioned = true;\n\t \n\t this.left_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.yes_annotation ? this.yes_annotation : this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.no_annotation ? this.no_annotation : this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ }),\n/* 6 */\n/*!******************************************!*\\\n !*** ./src/flowchart.symbol.parallel.js ***!\n \\******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Parallel(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t this.path1_annotation = options.path1_annotation || '';\n\t this.path2_annotation = options.path2_annotation || '';\n\t this.path3_annotation = options.path3_annotation || '';\n\t this.textMargin = this.getAttr('text-margin');\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t this.params = options.params;\n\t if (options.direction_next === 'path1' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path2' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path3' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t\n\t if (options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path1 === 'right') {\n\t this.path2_direction = 'bottom';\n\t this.path1_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path1 === 'top') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'top';\n\t this.path3_direction = 'bottom';\n\t } else if (options.direction_path1 === 'left') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'left';\n\t this.path3_direction = 'bottom';\n\t } else {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'left';\n\t this.path3_direction = 'right';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'top';\n\t this.path3_direction = 'right';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'left';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else {\n\t this.path1_direction = options.direction_path1;\n\t this.path2_direction = options.direction_path2;\n\t this.path3_direction = options.direction_path3;\n\t }\n\t\n\t this.path1_direction = this.path1_direction || 'bottom';\n\t this.path2_direction = this.path2_direction || 'right';\n\t this.path3_direction = this.path3_direction || 'top';\n\t\n\t this.initialize();\n\t}\n\tinherits(Parallel, Symbol);\n\t\n\tParallel.prototype.render = function() {\n\t if (this.path1_direction) {\n\t this[this.path1_direction + '_symbol'] = this.path1_symbol;\n\t }\n\t\n\t if (this.path2_direction) {\n\t this[this.path2_direction + '_symbol'] = this.path2_symbol;\n\t }\n\t\n\t if (this.path3_direction) {\n\t this[this.path3_direction + '_symbol'] = this.path3_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.top_symbol) {\n\t var topPoint = this.getTop();\n\t\n\t if (!this.top_symbol.isPositioned) {\n\t this.top_symbol.shiftY(this.getY() - this.top_symbol.height - lineLength);\n\t this.top_symbol.setX(topPoint.x + this.top_symbol.width);\n\t this.top_symbol.isPositioned = true;\n\t\n\t this.top_symbol.render();\n\t }\n\t }\n\t\n\t var self = this;\n\t\n\t if (this.left_symbol) {\n\t var leftPoint = this.getLeft();\n\t\n\t if (!this.left_symbol.isPositioned) {\n\t this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n\t this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.left_symbol.symbolType === 'end') return;\n\t self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.left_symbol.isPositioned = true;\n\t\n\t this.left_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.right_symbol.symbolType === 'end') return;\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tParallel.prototype.renderLines = function() {\n\t if (this.path1_symbol) {\n\t this.drawLineTo(this.path1_symbol, this.path1_annotation, this.path1_direction);\n\t }\n\t\n\t if (this.path2_symbol) {\n\t this.drawLineTo(this.path2_symbol, this.path2_annotation, this.path2_direction);\n\t }\n\t\n\t if (this.path3_symbol) {\n\t this.drawLineTo(this.path3_symbol, this.path3_annotation, this.path3_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Parallel;\n\n/***/ }),\n/* 7 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 16);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 8);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\tvar Parallel = __webpack_require__(/*! ./flowchart.symbol.parallel */ 6);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if (symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else if (symbol instanceof(Parallel)) {\n\t symbol.path1 = function(nextSymbol) {\n\t symbol.path1_symbol = nextSymbol;\n\t if (symbol.path2_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.path2 = function(nextSymbol) {\n\t symbol.path2_symbol = nextSymbol;\n\t if (symbol.path3_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.path3 = function(nextSymbol) {\n\t symbol.path3_symbol = nextSymbol;\n\t if (symbol.path1_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t minX = 0,\n\t minY = 0,\n\t symbol,\n\t line;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t var x;\n\t var y;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t var leftX = symbol.getX()\n\t x = leftX + symbol.width;\n\t y = symbol.getY() + symbol.height;\n\t if (leftX < minX) {\n\t minX = leftX;\n\t }\n\t if (x > maxX) {\n\t maxX = x;\n\t }\n\t if (y > maxY) {\n\t maxY = y;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.lines.length; i < len; i++) {\n\t line = this.lines[i].getBBox();\n\t x = line.x;\n\t y = line.y;\n\t var x2 = line.x2;\n\t var y2 = line.y2;\n\t if (x < minX) {\n\t minX = x;\n\t }\n\t if (y < minY) {\n\t minY = y;\n\t }\n\t if (x2 > maxX) {\n\t maxX = x2;\n\t }\n\t if (y2 > maxY) {\n\t maxY = y2;\n\t }\n\t }\n\t\n\t var scale = this.options['scale'];\n\t var lineWidth = this.options['line-width'];\n\t\n\t if (this.minXFromSymbols < minX) minX = this.minXFromSymbols;\n\t\n\t if (minX < 0) minX -= lineWidth;\n\t if (minY < 0) minY -= lineWidth;\n\t\n\t var width = maxX + lineWidth - minX;\n\t var height = maxY + lineWidth - minY;\n\t\n\t this.paper.setSize(width * scale, height * scale);\n\t this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode && paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n/***/ }),\n/* 8 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ (function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {},\n\t 'parallel': {}\n\t } //,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n/***/ }),\n/* 9 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ (function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ }),\n/* 10 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ }),\n/* 11 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t this.symbol = symbol\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ }),\n/* 12 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ }),\n/* 13 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ }),\n/* 14 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ }),\n/* 15 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\n\t\t(function( $ ) {\n\t\t\tfunction paramFit(needle, haystack) {\n\t\t\t\treturn needle == haystack ||\n\t\t\t\t( Array.isArray(haystack) && (haystack.includes(needle) || haystack.includes(Number(needle)) ))\n\t\t\t}\n\t\t\tvar methods = {\n\t\t\t\tinit : function(options) {\n\t\t\t\t\treturn this.each(function() {\n\t\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\t\tthis.chart = parse($this.text());\n\t\t\t\t\t\t$this.html('');\n\t\t\t\t\t\tthis.chart.drawSVG(this, options);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tsetFlowStateByParam : function(param, paramValue, newFlowState) {\n\t\t\t\t\treturn this.each(function() {\n\t\t\t\t\t\tvar chart = this.chart;\n\t\n\t\t\t\t\t\t// @todo this should be part of Symbol API\n\t\t\t\t\t\tvar nextSymbolKeys = ['next', 'yes', 'no', 'path1', 'path2', 'path3'];\n\t\n\t\t\t\t\t\tfor (var property in chart.symbols) {\n\t\t\t\t\t\t\tif (chart.symbols.hasOwnProperty(property)) {\n\t\t\t\t\t\t\t\tvar symbol = chart.symbols[property];\n\t\t\t\t\t\t\t\tvar val = symbol.params[param];\n\t\t\t\t\t\t\t\tif (paramFit(val, paramValue)) {\n\t\t\t\t\t\t\t\t\tsymbol.flowstate = newFlowState;\n\t\t\t\t\t\t\t\t\tfor (var nski = 0; nski < nextSymbolKeys.length; nski++) {\n\t\t\t\t\t\t\t\t\t\tvar nextSymbolKey = nextSymbolKeys[nski];\n\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey] &&\n\t\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey]['params'] &&\n\t\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey]['params'][param] &&\n\t\t\t\t\t\t\t\t\t\t\tparamFit(symbol[nextSymbolKey]['params'][param], paramValue)\n\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\tsymbol.lineStyle[symbol[nextSymbolKey]['key']] = {stroke: chart.options()['flowstate'][newFlowState]['fill']};\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tchart.clean();\n\t\t\t\t\t\tchart.drawSVG(this);\n\t\t\t\t\t});\n\t\n\t\t\t\t},\n\t\t\t\tclearFlowState: function () {\n\t\t\t\t\treturn this.each(function() {\n\t\t\t\t\t\tvar chart = this.chart;\n\t\n\t\t\t\t\t\tfor (var property in chart.symbols) {\n\t\t\t\t\t\t\tif (chart.symbols.hasOwnProperty(property)) {\n\t\t\t\t\t\t\t\tvar node = chart.symbols[property];\n\t\t\t\t\t\t\t\tnode.flowstate = '';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tchart.clean();\n\t\t\t\t\t\tchart.drawSVG(this);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t\t$.fn.flowChart = function(methodOrOptions) {\n\t\t\t\tif ( methods[methodOrOptions] ) {\n\t\t\t\t\treturn methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 ));\n\t\t\t\t} else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ) {\n\t\t\t\t\t// Default to \"init\"\n\t\t\t\t\treturn methods.init.apply( this, arguments );\n\t\t\t\t} else {\n\t\t\t\t\t$.error( 'Method ' + methodOrOptions + ' does not exist on jQuery.flowChart' );\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ }),\n/* 16 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ (function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// flowchart.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 741234b9605c2cc42761","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./index.js\n// module id = 0\n// module chunks = 0","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.helpers.js\n// module id = 1\n// module chunks = 0","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n this.lineStyle = (options.lineStyle || {});\n this.key = (options.key || '');\n this.leftLines = [];\n this.rightLines = [];\n this.topLines = [];\n this.bottomLines = [];\n this.params = options.params;\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n \n //ndrqu Add click function with event and options params\n if (options.function) { \n this.text.attr({ 'cursor' : 'pointer' });\n\n this.text.node.addEventListener(\"click\", function(evt) {\n window[options.function](evt,options);\n }, false);\n }\n\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n\n //ndrqu Add click function with event and options params\n if (options.function) { \n symbol.node.addEventListener(\"click\", function(evt) {\n window[options.function](evt,options);\n }, false);\n symbol.attr({ 'cursor' : 'pointer' });\n }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var self = this;\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n if (self.next.symbolType === 'end') return;\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else if (this.next_direction === 'left') {\n\n var leftPoint = this.getLeft();\n\n if (!this.next.isPositioned) {\n this.next.setY(leftPoint.y - this.next.height/2);\n this.next.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n if (self.next.symbolType === 'end') return;\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, this.getAttr('arrow-text') || '', this.next_direction);\n } else {\n this.drawLineTo(this.next, this.getAttr('arrow-text') || '');\n }\n }\n};\n\nSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n if (this.connectedTo.indexOf(symbol) < 0) {\n this.connectedTo.push(symbol);\n }\n\n var x = this.getCenter().x,\n y = this.getCenter().y,\n right = this.getRight(),\n bottom = this.getBottom(),\n top = this.getTop(),\n left = this.getLeft();\n\n var symbolX = symbol.getCenter().x,\n symbolY = symbol.getCenter().y,\n symbolTop = symbol.getTop(),\n symbolRight = symbol.getRight(),\n symbolLeft = symbol.getLeft();\n\n var isOnSameColumn = x === symbolX,\n isOnSameLine = y === symbolY,\n isUnder = y < symbolY,\n isUpper = y > symbolY || this === symbol,\n isLeft = x > symbolX,\n isRight = x < symbolX;\n\n var maxX = 0,\n line,\n yOffset,\n lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n if (symbol.topLines.length === 0 && this.bottomLines.length === 0) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n } else {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n line = drawLine(this.chart, bottom, [\n {x: symbolTop.x, y: symbolTop.y - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n if (symbol.leftLines.length === 0 && this.rightLines.length === 0) {\n line = drawLine(this.chart, right, symbolLeft, text);\n } else {\n yOffset = Math.max(symbol.leftLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x, y: right.y - yOffset},\n {x: right.x, y: symbolLeft.y - yOffset},\n {x: symbolLeft.x, y: symbolLeft.y - yOffset},\n {x: symbolLeft.x, y: symbolLeft.y}\n ], text);\n }\n this.rightLines.push(line);\n symbol.leftLines.push(line);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n if (symbol.rightLines.length === 0 && this.leftLines.length === 0) {\n line = drawLine(this.chart, left, symbolRight, text);\n } else {\n yOffset = Math.max(symbol.rightLines.length, this.leftLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x, y: right.y - yOffset},\n {x: right.x, y: symbolRight.y - yOffset},\n {x: symbolRight.x, y: symbolRight.y - yOffset},\n {x: symbolRight.x, y: symbolRight.y}\n ], text);\n }\n this.leftLines.push(line);\n symbol.rightLines.push(line);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y - yOffset},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightLines.push(line);\n symbol.topLines.push(line);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y - yOffset},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightLines.push(line);\n symbol.topLines.push(line);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2 - yOffset},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n } else {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((!origin || origin === 'bottom') && isRight && isUnder) {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n if (symbolTop.x > maxX) maxX = symbolTop.x;\n } else if ((!origin || origin === 'bottom') && isRight) {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2 - yOffset},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((origin && origin === 'right') && isLeft) {\n yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightLines.push(line);\n symbol.topLines.push(line);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y - yOffset},\n {x: symbolTop.x, y: symbolTop.y - yOffset}\n ], text);\n this.rightLines.push(line);\n symbol.topLines.push(line);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2 - yOffset},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + lineLength/2;\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n var diffX = left.x - lineLength/2;\n if (symbolLeft.x < left.x) {\n diffX = symbolLeft.x - lineLength/2;\n }\n yOffset = Math.max(symbol.topLines.length, this.leftLines.length) * 10;\n line = drawLine(this.chart, left, [\n {x: diffX, y: left.y - yOffset},\n {x: diffX, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftLines.push(line);\n symbol.topLines.push(line);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\n yOffset = Math.max(symbol.topLines.length, this.leftLines.length) * 10;\n line = drawLine(this.chart, left, [\n {x: symbolTop.x + (left.x - symbolTop.x)/2, y: left.y},\n {x: symbolTop.x + (left.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftLines.push(line);\n symbol.topLines.push(line);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'top')) {\n yOffset = Math.max(symbol.topLines.length, this.topLines.length) * 10;\n line = drawLine(this.chart, top, [\n {x: top.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.topLines.push(line);\n symbol.topLines.push(line);\n this.topStart = true;\n symbol.topEnd = true;\n maxX = top.x;\n }\n\n //update line style\n if (this.lineStyle[symbol.key] && line){\n line.attr(this.lineStyle[symbol.key]);\n }\n\n if (line) {\n for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n var otherLine = this.chart.lines[l];\n\n var ePath = otherLine.attr('path'),\n lPath = line.attr('path');\n\n for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n var newPath = [];\n newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\n var line1_from_x = newPath[0][1];\n var line1_from_y = newPath[0][2];\n var line1_to_x = newPath[1][1];\n var line1_to_y = newPath[1][2];\n\n for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n var newLinePath = [];\n newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\n var line2_from_x = newLinePath[0][1];\n var line2_from_y = newLinePath[0][2];\n var line2_to_x = newLinePath[1][1];\n var line2_to_y = newLinePath[1][2];\n\n var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n if (res.onLine1 && res.onLine2) {\n\n var newSegment;\n if (line2_from_y === line2_to_y) {\n if (line2_from_x > line2_to_x) {\n newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n } else {\n if (line2_from_y > line2_to_y) {\n newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n }\n\n lP += 2;\n }\n }\n }\n }\n\n this.chart.lines.push(line);\n if (this.chart.minXFromSymbols === undefined || this.chart.minXFromSymbols > left.x) {\n this.chart.minXFromSymbols = left.x;\n }\n }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.js\n// module id = 2\n// module chunks = 0","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n var textAnchor = 'start';\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n if (from.x > firstTo.x) {\n x -= chart.options['text-margin']/2;\n textAnchor = 'end';\n } else {\n x += chart.options['text-margin']/2;\n }\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n if (from.y > firstTo.y) {\n y -= chart.options['text-margin']*2;\n }\n }\n }\n\n textPath.attr({\n 'text-anchor': textAnchor,\n 'font-size': chart.options['font-size'],\n 'fill': chart.options['font-color'],\n x: x,\n y: y\n });\n\n if (font) textPath.attr({ 'font': font });\n if (fontF) textPath.attr({ 'font-family': fontF });\n if (fontW) textPath.attr({ 'font-weight': fontW });\n }\n\n return line;\n}\n\nfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n var denominator, a, b, numerator1, numerator2, result = {\n x: null,\n y: null,\n onLine1: false,\n onLine2: false\n };\n denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n if (denominator === 0) {\n return result;\n }\n a = line1StartY - line2StartY;\n b = line1StartX - line2StartX;\n numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n a = numerator1 / denominator;\n b = numerator2 / denominator;\n\n // if we cast these lines infinitely in both directions, they intersect here:\n result.x = line1StartX + (a * (line1EndX - line1StartX));\n result.y = line1StartY + (a * (line1EndY - line1StartY));\n /*\n // it is worth noting that this should be the same as:\n x = line2StartX + (b * (line2EndX - line2StartX));\n y = line2StartX + (b * (line2EndY - line2StartY));\n */\n // if line1 is a segment and line2 is infinite, they intersect if:\n if (a > 0 && a < 1) {\n result.onLine1 = true;\n }\n // if line2 is a segment and line1 is infinite, they intersect if:\n if (b > 0 && b < 1) {\n result.onLine2 = true;\n }\n // if line1 and line2 are segments, they intersect if both of the above are true\n return result;\n}\n\nmodule.exports = {\n\tdrawPath: drawPath,\n\tdrawLine: drawLine,\n\tcheckLineIntersection: checkLineIntersection\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.functions.js\n// module id = 3\n// module chunks = 0","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\nvar Parallel = require('./flowchart.symbol.parallel');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s);\n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n case 'parallel':\n dispSymbols[s.key] = new Parallel(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else if (prevDisp instanceof(Parallel)) {\n if (prev.path1 === s) {\n prevDisp.path1(dispSymb);\n }\n if (prev.path2 === s) {\n prevDisp.path2(dispSymb);\n }\n if (prev.path3 === s) {\n prevDisp.path3(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (dispSymb instanceof(Parallel)) {\n if (s.path1) {\n constructChart(s.path1, dispSymb, s);\n }\n if (s.path2) {\n constructChart(s.path2, dispSymb, s);\n }\n if (s.path3) {\n constructChart(s.path3, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n },\n options: function() {\n return this.diagram.options;\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if (prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getStyle(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '{}';\n }\n\n function getSymbValue(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '';\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)];\n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n \n function getAnnotation(s) {\n\tvar startIndex = s.indexOf(\"(\") + 1, endIndex = s.indexOf(\")\");\n\tvar tmp = s.substring(startIndex, endIndex);\n\tif(tmp.indexOf(\",\") > 0) { tmp = tmp.substring(0, tmp.indexOf(\",\")); }\n\tvar tmp_split = tmp.split(\"@\");\n\tif(tmp_split.length > 1)\n\t\treturn startIndex >= 0 && endIndex >= 0 ? tmp_split[1] : \"\";\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0].trim();\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0].replace(/\\(.*\\)/, ''),\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null,\n function: null,\n lineStyle: {},\n params: {}\n };\n\n //parse parameters\n var params = parts[0].match(/\\((.*)\\)/);\n if (params && params.length > 1){\n var entries = params[1].split(',');\n for(var i = 0; i < entries.length; i++) {\n var entry = entries[i].split('=');\n if (entry.length == 2) {\n symbol.params[entry[0]] = entry[1];\n }\n }\n }\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':$') >= 0) {\n sub = symbol.text.split(':$');\n symbol.text = sub.shift();\n symbol.function = sub.join(':$');\n } else if (symbol.symbolType.indexOf(':$') >= 0) {\n sub = symbol.symbolType.split(':$');\n symbol.symbolType = sub.shift();\n symbol.function = sub.join(':$');\n } else if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n var ann = getAnnotation(line);\n if (ann) {\n line = line.replace('@' + ann, ''); \n }\n // flow\n var flowSymbols = line.split('->');\n for (var iS = 0, lenS = flowSymbols.length; iS < lenS; iS++) {\n var flowSymb = flowSymbols[iS];\n var symbVal = getSymbValue(flowSymb);\n\n if (symbVal === 'true' || symbVal === 'false') {\n // map true or false to yes or no respectively\n flowSymb = flowSymb.replace('true', 'yes');\n flowSymb = flowSymb.replace('false', 'no');\n }\n \n var next = getNextPath(flowSymb);\n var realSymb = getSymbol(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (ann) {\n if (realSymb.symbolType === 'condition') {\n if (next === \"yes\" || next === \"true\") {\n realSymb.yes_annotation = ann;\n } else {\n realSymb.no_annotation = ann;\n }\n } else if (realSymb.symbolType === 'parallel') {\n if (next === 'path1') {\n realSymb.path1_annotation = ann;\n } else if (next === 'path2') {\n realSymb.path2_annotation = ann;\n } else if (next === 'path3') {\n realSymb.path3_annotation = ann;\n }\n }\n ann = null;\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (iS + 1 < lenS) {\n var nextSymb = flowSymbols[iS + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n } else if (line.indexOf('@>') >= 0) {\n\n // line style\n var lineStyleSymbols = line.split('@>');\n for (var iSS = 0, lenSS = lineStyleSymbols.length; iSS < lenSS; iSS++) {\n if ((iSS + 1) !== lenSS) {\n var curSymb = getSymbol(lineStyleSymbols[iSS]);\n var nextSymbol = getSymbol(lineStyleSymbols[iSS+1]);\n\n curSymb['lineStyle'][nextSymbol.key] = JSON.parse(getStyle(lineStyleSymbols[iSS + 1]));\n }\n }\n }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.parse.js\n// module id = 4\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.yes_annotation = options.yes_annotation;\n this.no_annotation = options.no_annotation;\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = options.direction_yes;\n this.no_direction = options.direction_no;\n if (!this.no_direction && this.yes_direction === 'right') {\n this.no_direction = 'bottom';\n } else if (!this.yes_direction && this.no_direction === 'bottom') {\n this.yes_direction = 'right'\n }\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n this.symbol = symbol\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n var self = this;\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n if (self.right_symbol.symbolType === 'end') return;\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n \n if (this.left_symbol) {\n var leftPoint = this.getLeft();\n \n if (!this.left_symbol.isPositioned) {\n this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n \n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n \n if (hasSymbolUnder) {\n if (self.left_symbol.symbolType === 'end') return;\n self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n \n this.left_symbol.isPositioned = true;\n \n this.left_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.yes_annotation ? this.yes_annotation : this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.no_annotation ? this.no_annotation : this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.condition.js\n// module id = 5\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Parallel(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n this.path1_annotation = options.path1_annotation || '';\n this.path2_annotation = options.path2_annotation || '';\n this.path3_annotation = options.path3_annotation || '';\n this.textMargin = this.getAttr('text-margin');\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'top';\n this.params = options.params;\n if (options.direction_next === 'path1' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n if (options.direction_next === 'path2' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n if (options.direction_next === 'path3' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n\n if (options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3) {\n if (options.direction_path1 === 'right') {\n this.path2_direction = 'bottom';\n this.path1_direction = 'right';\n this.path3_direction = 'top';\n } else if (options.direction_path1 === 'top') {\n this.path2_direction = 'right';\n this.path1_direction = 'top';\n this.path3_direction = 'bottom';\n } else if (options.direction_path1 === 'left') {\n this.path2_direction = 'right';\n this.path1_direction = 'left';\n this.path3_direction = 'bottom';\n } else {\n this.path2_direction = 'right';\n this.path1_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else if (options.path1 && !options.direction_path1 && options.path2 && options.direction_path2 && options.path3 && !options.direction_path3) {\n if (options.direction_path2 === 'right') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'top';\n } else if (options.direction_path2 === 'left') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'left';\n this.path3_direction = 'right';\n } else {\n this.path1_direction = 'right';\n this.path2_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else if (options.path1 && !options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && options.direction_path3) {\n if (options.direction_path2 === 'right') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'top';\n this.path3_direction = 'right';\n } else if (options.direction_path2 === 'left') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'left';\n } else {\n this.path1_direction = 'right';\n this.path2_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else {\n this.path1_direction = options.direction_path1;\n this.path2_direction = options.direction_path2;\n this.path3_direction = options.direction_path3;\n }\n\n this.path1_direction = this.path1_direction || 'bottom';\n this.path2_direction = this.path2_direction || 'right';\n this.path3_direction = this.path3_direction || 'top';\n\n this.initialize();\n}\ninherits(Parallel, Symbol);\n\nParallel.prototype.render = function() {\n if (this.path1_direction) {\n this[this.path1_direction + '_symbol'] = this.path1_symbol;\n }\n\n if (this.path2_direction) {\n this[this.path2_direction + '_symbol'] = this.path2_symbol;\n }\n\n if (this.path3_direction) {\n this[this.path3_direction + '_symbol'] = this.path3_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.top_symbol) {\n var topPoint = this.getTop();\n\n if (!this.top_symbol.isPositioned) {\n this.top_symbol.shiftY(this.getY() - this.top_symbol.height - lineLength);\n this.top_symbol.setX(topPoint.x + this.top_symbol.width);\n this.top_symbol.isPositioned = true;\n\n this.top_symbol.render();\n }\n }\n\n var self = this;\n\n if (this.left_symbol) {\n var leftPoint = this.getLeft();\n\n if (!this.left_symbol.isPositioned) {\n this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n if (self.left_symbol.symbolType === 'end') return;\n self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.left_symbol.isPositioned = true;\n\n this.left_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n if (self.right_symbol.symbolType === 'end') return;\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nParallel.prototype.renderLines = function() {\n if (this.path1_symbol) {\n this.drawLineTo(this.path1_symbol, this.path1_annotation, this.path1_direction);\n }\n\n if (this.path2_symbol) {\n this.drawLineTo(this.path2_symbol, this.path2_annotation, this.path2_direction);\n }\n\n if (this.path3_symbol) {\n this.drawLineTo(this.path3_symbol, this.path3_annotation, this.path3_direction);\n }\n};\n\nmodule.exports = Parallel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.parallel.js\n// module id = 6\n// module chunks = 0","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\nvar Parallel = require('./flowchart.symbol.parallel');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if (symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else if (symbol instanceof(Parallel)) {\n symbol.path1 = function(nextSymbol) {\n symbol.path1_symbol = nextSymbol;\n if (symbol.path2_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.path2 = function(nextSymbol) {\n symbol.path2_symbol = nextSymbol;\n if (symbol.path3_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.path3 = function(nextSymbol) {\n symbol.path3_symbol = nextSymbol;\n if (symbol.path1_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n minX = 0,\n minY = 0,\n symbol,\n line;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n var x;\n var y;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n var leftX = symbol.getX()\n x = leftX + symbol.width;\n y = symbol.getY() + symbol.height;\n if (leftX < minX) {\n minX = leftX;\n }\n if (x > maxX) {\n maxX = x;\n }\n if (y > maxY) {\n maxY = y;\n }\n }\n\n for (i = 0, len = this.lines.length; i < len; i++) {\n line = this.lines[i].getBBox();\n x = line.x;\n y = line.y;\n var x2 = line.x2;\n var y2 = line.y2;\n if (x < minX) {\n minX = x;\n }\n if (y < minY) {\n minY = y;\n }\n if (x2 > maxX) {\n maxX = x2;\n }\n if (y2 > maxY) {\n maxY = y2;\n }\n }\n\n var scale = this.options['scale'];\n var lineWidth = this.options['line-width'];\n\n if (this.minXFromSymbols < minX) minX = this.minXFromSymbols;\n\n if (minX < 0) minX -= lineWidth;\n if (minY < 0) minY -= lineWidth;\n\n var width = maxX + lineWidth - minX;\n var height = maxY + lineWidth - minY;\n\n this.paper.setSize(width * scale, height * scale);\n this.paper.setViewBox(minX, minY, width, height, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode && paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.chart.js\n// module id = 7\n// module chunks = 0","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {},\n 'parallel': {}\n } //,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.defaults.js\n// module id = 8\n// module chunks = 0","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.shim.js\n// module id = 9\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.end.js\n// module id = 10\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n this.symbol = symbol\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.inputoutput.js\n// module id = 11\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.operation.js\n// module id = 12\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.start.js\n// module id = 13\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.subroutine.js\n// module id = 14\n// module chunks = 0","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\n\t(function( $ ) {\n\t\tfunction paramFit(needle, haystack) {\n\t\t\treturn needle == haystack ||\n\t\t\t( Array.isArray(haystack) && (haystack.includes(needle) || haystack.includes(Number(needle)) ))\n\t\t}\n\t\tvar methods = {\n\t\t\tinit : function(options) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tthis.chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tthis.chart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t},\n\t\t\tsetFlowStateByParam : function(param, paramValue, newFlowState) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar chart = this.chart;\n\n\t\t\t\t\t// @todo this should be part of Symbol API\n\t\t\t\t\tvar nextSymbolKeys = ['next', 'yes', 'no', 'path1', 'path2', 'path3'];\n\n\t\t\t\t\tfor (var property in chart.symbols) {\n\t\t\t\t\t\tif (chart.symbols.hasOwnProperty(property)) {\n\t\t\t\t\t\t\tvar symbol = chart.symbols[property];\n\t\t\t\t\t\t\tvar val = symbol.params[param];\n\t\t\t\t\t\t\tif (paramFit(val, paramValue)) {\n\t\t\t\t\t\t\t\tsymbol.flowstate = newFlowState;\n\t\t\t\t\t\t\t\tfor (var nski = 0; nski < nextSymbolKeys.length; nski++) {\n\t\t\t\t\t\t\t\t\tvar nextSymbolKey = nextSymbolKeys[nski];\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey] &&\n\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey]['params'] &&\n\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey]['params'][param] &&\n\t\t\t\t\t\t\t\t\t\tparamFit(symbol[nextSymbolKey]['params'][param], paramValue)\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tsymbol.lineStyle[symbol[nextSymbolKey]['key']] = {stroke: chart.options()['flowstate'][newFlowState]['fill']};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tchart.clean();\n\t\t\t\t\tchart.drawSVG(this);\n\t\t\t\t});\n\n\t\t\t},\n\t\t\tclearFlowState: function () {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar chart = this.chart;\n\n\t\t\t\t\tfor (var property in chart.symbols) {\n\t\t\t\t\t\tif (chart.symbols.hasOwnProperty(property)) {\n\t\t\t\t\t\t\tvar node = chart.symbols[property];\n\t\t\t\t\t\t\tnode.flowstate = '';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tchart.clean();\n\t\t\t\t\tchart.drawSVG(this);\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\t$.fn.flowChart = function(methodOrOptions) {\n\t\t\tif ( methods[methodOrOptions] ) {\n\t\t\t\treturn methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 ));\n\t\t\t} else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ) {\n\t\t\t\t// Default to \"init\"\n\t\t\t\treturn methods.init.apply( this, arguments );\n\t\t\t} else {\n\t\t\t\t$.error( 'Method ' + methodOrOptions + ' does not exist on jQuery.flowChart' );\n\t\t\t}\n\t\t};\n\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/jquery-plugin.js\n// module id = 15\n// module chunks = 0","module.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"Raphael\"\n// module id = 16\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/release/flowchart.min.js b/release/flowchart.min.js index 43b7c2df..fb937726 100644 --- a/release/flowchart.min.js +++ b/release/flowchart.min.js @@ -1,8 +1,8 @@ -// flowchart.js, v1.14.1 -// Copyright (c)2020 Adriano Raiano (adrai). +// flowchart.js, v1.16.0 +// Copyright (c)2021 Adriano Raiano (adrai). // Distributed under MIT license // http://adrai.github.io/flowchart.js -!function(t,i){if("object"==typeof exports&&"object"==typeof module)module.exports=i(require("Raphael"));else if("function"==typeof define&&define.amd)define(["Raphael"],i);else{var e=i("object"==typeof exports?require("Raphael"):t.Raphael);for(var s in e)("object"==typeof exports?exports:t)[s]=e[s]}}(this,function(t){return function(t){function i(s){if(e[s])return e[s].exports;var n=e[s]={exports:{},id:s,loaded:!1};return t[s].call(n.exports,n,n.exports,i),n.loaded=!0,n.exports}var e={};return i.m=t,i.c=e,i.p="",i(0)}([function(t,i,e){e(9);var s=e(4);e(15);var n={parse:s};"undefined"!=typeof window&&(window.flowchart=n),t.exports=n},function(t,i){function e(t,i){if(!t||"function"==typeof t)return i;var s={};for(var n in i)s[n]=i[n];for(n in t)t[n]&&("object"==typeof s[n]?s[n]=e(s[n],t[n]):s[n]=t[n]);return s}function s(t,i){if("function"==typeof Object.create)t.super_=i,t.prototype=Object.create(i.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}});else{t.super_=i;var e=function(){};e.prototype=i.prototype,t.prototype=new e,t.prototype.constructor=t}}t.exports={defaults:e,inherits:s}},function(t,i,e){function s(t,i,e){this.chart=t,this.group=this.chart.paper.set(),this.symbol=e,this.connectedTo=[],this.symbolType=i.symbolType,this.flowstate=i.flowstate||"future",this.lineStyle=i.lineStyle||{},this.key=i.key||"",this.leftLines=[],this.rightLines=[],this.topLines=[],this.bottomLines=[],this.next_direction=i.next&&i.direction_next?i.direction_next:void 0,this.text=this.chart.paper.text(0,0,i.text),i.key&&(this.text.node.id=i.key+"t"),this.text.node.setAttribute("class",this.getAttr("class")+"t"),this.text.attr({"text-anchor":"start",x:this.getAttr("text-margin"),fill:this.getAttr("font-color"),"font-size":this.getAttr("font-size")});var s=this.getAttr("font"),n=this.getAttr("font-family"),h=this.getAttr("font-weight");s&&this.text.attr({font:s}),n&&this.text.attr({"font-family":n}),h&&this.text.attr({"font-weight":h}),i.link&&this.text.attr("href",i.link),i.function&&(this.text.attr({cursor:"pointer"}),this.text.node.addEventListener("click",function(t){window[i.function](t,i)},!1)),i.target&&this.text.attr("target",i.target);var o=this.getAttr("maxWidth");if(o){for(var r=i.text.split(" "),a="",l=0,p=r.length;lo?"\n"+y:" "+y}this.text.attr("text",a.substring(1))}if(this.group.push(this.text),e){var x=this.getAttr("text-margin");e.attr({fill:this.getAttr("fill"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*x,height:this.text.getBBox().height+2*x}),e.node.setAttribute("class",this.getAttr("class")),i.link&&e.attr("href",i.link),i.target&&e.attr("target",i.target),i.function&&(e.node.addEventListener("click",function(t){window[i.function](t,i)},!1),e.attr({cursor:"pointer"})),i.key&&(e.node.id=i.key),this.group.push(e),e.insertBefore(this.text),this.text.attr({y:e.getBBox().height/2}),this.initialize()}}var n=e(3),h=n.drawLine,o=n.checkLineIntersection;s.prototype.getAttr=function(t){if(this.chart){var i,e=this.chart.options?this.chart.options[t]:void 0,s=this.chart.options.symbols?this.chart.options.symbols[this.symbolType][t]:void 0;return this.chart.options.flowstate&&this.chart.options.flowstate[this.flowstate]&&(i=this.chart.options.flowstate[this.flowstate][t]),i||s||e}},s.prototype.initialize=function(){this.group.transform("t"+this.getAttr("line-width")+","+this.getAttr("line-width")),this.width=this.group.getBBox().width,this.height=this.group.getBBox().height},s.prototype.getCenter=function(){return{x:this.getX()+this.width/2,y:this.getY()+this.height/2}},s.prototype.getX=function(){return this.group.getBBox().x},s.prototype.getY=function(){return this.group.getBBox().y},s.prototype.shiftX=function(t){this.group.transform("t"+(this.getX()+t)+","+this.getY())},s.prototype.setX=function(t){this.group.transform("t"+t+","+this.getY())},s.prototype.shiftY=function(t){this.group.transform("t"+this.getX()+","+(this.getY()+t))},s.prototype.setY=function(t){this.group.transform("t"+this.getX()+","+t)},s.prototype.getTop=function(){var t=this.getY(),i=this.getX()+this.width/2;return{x:i,y:t}},s.prototype.getBottom=function(){var t=this.getY()+this.height,i=this.getX()+this.width/2;return{x:i,y:t}},s.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX();return{x:i,y:t}},s.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width;return{x:i,y:t}},s.prototype.render=function(){if(this.next){var t=this,i=this.getAttr("line-length");if("right"===this.next_direction){var e=this.getRight();this.next.isPositioned||(this.next.setY(e.y-this.next.height/2),this.next.shiftX(this.group.getBBox().x+this.width+i),function e(){for(var s,n=!1,h=0,o=t.chart.symbols.length;ht.next.getCenter().y&&r<=t.next.width/2){n=!0;break}}if(n){if("end"===t.next.symbolType)return;t.next.setX(s.getX()+s.width+i),e()}}(),this.next.isPositioned=!0,this.next.render())}else if("left"===this.next_direction){var s=this.getLeft();this.next.isPositioned||(this.next.setY(s.y-this.next.height/2),this.next.shiftX(-(this.group.getBBox().x+this.width+i)),function e(){for(var s,n=!1,h=0,o=t.chart.symbols.length;ht.next.getCenter().y&&r<=t.next.width/2){n=!0;break}}if(n){if("end"===t.next.symbolType)return;t.next.setX(s.getX()+s.width+i),e()}}(),this.next.isPositioned=!0,this.next.render())}else{var n=this.getBottom();this.next.isPositioned||(this.next.shiftY(this.getY()+this.height+i),this.next.setX(n.x-this.next.width/2),this.next.isPositioned=!0,this.next.render())}}},s.prototype.renderLines=function(){this.next&&(this.next_direction?this.drawLineTo(this.next,this.getAttr("arrow-text")||"",this.next_direction):this.drawLineTo(this.next,this.getAttr("arrow-text")||""))},s.prototype.drawLineTo=function(t,i,e){this.connectedTo.indexOf(t)<0&&this.connectedTo.push(t);var s,n,r=this.getCenter().x,a=this.getCenter().y,l=this.getRight(),p=this.getBottom(),y=this.getTop(),x=this.getLeft(),g=t.getCenter().x,f=t.getCenter().y,c=t.getTop(),d=t.getRight(),m=t.getLeft(),u=r===g,b=a===f,_=af||this===t,w=r>g,L=rk&&(k=c.x);else n=10*Math.max(t.topLines.length,this.bottomLines.length),s=this.leftEnd&&v?h(this.chart,p,[{x:p.x,y:p.y+B/2-n},{x:p.x+(p.x-c.x)/2,y:p.y+B/2-n},{x:p.x+(p.x-c.x)/2,y:c.y-B/2-n},{x:c.x,y:c.y-B/2-n},{x:c.x,y:c.y}],i):h(this.chart,p,[{x:p.x,y:c.y-B/2-n},{x:c.x,y:c.y-B/2-n},{x:c.x,y:c.y}],i),this.bottomLines.push(s),t.topLines.push(s),this.bottomStart=!0,t.topEnd=!0,k=p.x+(p.x-c.x)/2;else n=10*Math.max(t.topLines.length,this.rightLines.length),s=h(this.chart,l,[{x:l.x+B/2,y:l.y-n},{x:l.x+B/2,y:c.y-B/2-n},{x:c.x,y:c.y-B/2-n},{x:c.x,y:c.y}],i),this.rightLines.push(s),t.topLines.push(s),this.rightStart=!0,t.topEnd=!0,k=l.x+B/2;else n=10*Math.max(t.topLines.length,this.rightLines.length),s=h(this.chart,l,[{x:l.x+B/2,y:l.y-n},{x:l.x+B/2,y:c.y-B/2-n},{x:c.x,y:c.y-B/2-n},{x:c.x,y:c.y}],i),this.rightLines.push(s),t.topLines.push(s),this.rightStart=!0,t.topEnd=!0,k=l.x+B/2;else 0===t.rightLines.length&&0===this.leftLines.length?s=h(this.chart,x,d,i):(n=10*Math.max(t.rightLines.length,this.leftLines.length),s=h(this.chart,l,[{x:l.x,y:l.y-n},{x:l.x,y:d.y-n},{x:d.x,y:d.y-n},{x:d.x,y:d.y}],i)),this.leftLines.push(s),t.rightLines.push(s),this.leftStart=!0,t.rightEnd=!0,k=d.x;else 0===t.leftLines.length&&0===this.rightLines.length?s=h(this.chart,l,m,i):(n=10*Math.max(t.leftLines.length,this.rightLines.length),s=h(this.chart,l,[{x:l.x,y:l.y-n},{x:l.x,y:m.y-n},{x:m.x,y:m.y-n},{x:m.x,y:m.y}],i)),this.rightLines.push(s),t.leftLines.push(s),this.rightStart=!0,t.leftEnd=!0,k=m.x;else 0===t.topLines.length&&0===this.bottomLines.length?s=h(this.chart,p,c,i):(n=10*Math.max(t.topLines.length,this.bottomLines.length),s=h(this.chart,p,[{x:c.x,y:c.y-n},{x:c.x,y:c.y}],i)),this.bottomLines.push(s),t.topLines.push(s),this.bottomStart=!0,t.topEnd=!0,k=p.x;if(this.lineStyle[t.key]&&s&&s.attr(this.lineStyle[t.key]),s){for(var O=0,X=this.chart.lines.length;OW?(J=["L",q.x+2*A,I],C.splice($+1,0,J),J=["C",q.x+2*A,I,q.x,I-4*A,q.x-2*A,I],C.splice($+2,0,J),s.attr("path",C)):(J=["L",q.x-2*A,I],C.splice($+1,0,J),J=["C",q.x-2*A,I,q.x,I-4*A,q.x+2*A,I],C.splice($+2,0,J),s.attr("path",C)):I>Q?(J=["L",G,q.y+2*A],C.splice($+1,0,J),J=["C",G,q.y+2*A,G+4*A,q.y,G,q.y-2*A],C.splice($+2,0,J),s.attr("path",C)):(J=["L",G,q.y-2*A],C.splice($+1,0,J),J=["C",G,q.y-2*A,G+4*A,q.y,G,q.y+2*A],C.splice($+2,0,J),s.attr("path",C)),$+=2}}}this.chart.lines.push(s),(void 0===this.chart.minXFromSymbols||this.chart.minXFromSymbols>x.x)&&(this.chart.minXFromSymbols=x.x)}(!this.chart.maxXFromLine||this.chart.maxXFromLine&&k>this.chart.maxXFromLine)&&(this.chart.maxXFromLine=k)},t.exports=s},function(t,i){function e(t,i,e){var s,n,h="M{0},{1}";for(s=2,n=2*e.length+2;sd.x?i.x-(i.x-d.x)/2:d.x-(d.x-i.x)/2,u=i.y>d.y?i.y-(i.y-d.y)/2:d.y-(d.y-i.y)/2,c?(m-=g.getBBox().width/2,u-=t.options["text-margin"]):(m+=t.options["text-margin"],u-=g.getBBox().height/2)):(m=i.x,u=i.y,c?(i.x>d.x?(m-=t.options["text-margin"]/2,f="end"):m+=t.options["text-margin"]/2,u-=t.options["text-margin"]):(m+=t.options["text-margin"]/2,u+=t.options["text-margin"],i.y>d.y&&(u-=2*t.options["text-margin"]))),g.attr({"text-anchor":f,"font-size":t.options["font-size"],fill:t.options["font-color"],x:m,y:u}),l&&g.attr({font:l}),p&&g.attr({"font-family":p}),y&&g.attr({"font-weight":y})}return a}function n(t,i,e,s,n,h,o,r){var a,l,p,y,x,g={x:null,y:null,onLine1:!1,onLine2:!1};return a=(r-h)*(e-t)-(o-n)*(s-i),0===a?g:(l=i-h,p=t-n,y=(o-n)*l-(r-h)*p,x=(e-t)*l-(s-i)*p,l=y/a,p=x/a,g.x=t+l*(e-t),g.y=i+l*(s-i),l>0&&l<1&&(g.onLine1=!0),p>0&&p<1&&(g.onLine2=!0),g)}t.exports={drawPath:e,drawLine:s,checkLineIntersection:n}},function(t,i,e){function s(t){function i(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?t.substring(i,e):"{}"}function e(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?t.substring(i,e):""}function s(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?f.symbols[t.substring(0,i-1)]:f.symbols[t]}function x(t){var i="next",e=t.indexOf("(")+1,s=t.indexOf(")");return e>=0&&s>=0&&(i=F.substring(e,s),i.indexOf(",")<0&&"yes"!==i&&"no"!==i&&(i="next, "+i)),i}function g(t){var i=t.indexOf("(")+1,e=t.indexOf(")"),s=t.substring(i,e);s.indexOf(",")>0&&(s=s.substring(0,s.indexOf(",")));var n=s.split("@");if(n.length>1)return i>=0&&e>=0?n[1]:""}t=t||"",t=t.trim();for(var f={symbols:{},start:null,drawSVG:function(t,i){function e(t){if(g[t.key])return g[t.key];switch(t.symbolType){case"start":g[t.key]=new h(x,t);break;case"end":g[t.key]=new o(x,t);break;case"operation":g[t.key]=new r(x,t);break;case"inputoutput":g[t.key]=new a(x,t);break;case"subroutine":g[t.key]=new l(x,t);break;case"condition":g[t.key]=new p(x,t);break;case"parallel":g[t.key]=new y(x,t);break;default:return new Error("Wrong symbol type!")}return g[t.key]}var s=this;this.diagram&&this.diagram.clean();var x=new n(t,i);this.diagram=x;var g={};!function t(i,n,h){var o=e(i);return s.start===i?x.startWith(o):n&&h&&!n.pathOk&&(n instanceof p?(h.yes===i&&n.yes(o),h.no===i&&n.no(o)):n instanceof y?(h.path1===i&&n.path1(o),h.path2===i&&n.path2(o),h.path3===i&&n.path3(o)):n.then(o)),o.pathOk?o:(o instanceof p?(i.yes&&t(i.yes,o,i),i.no&&t(i.no,o,i)):o instanceof y?(i.path1&&t(i.path1,o,i),i.path2&&t(i.path2,o,i),i.path3&&t(i.path3,o,i)):i.next&&t(i.next,o,i),o)}(this.start),x.render()},clean:function(){this.diagram.clean()},options:function(){return this.diagram.options}},c=[],d=0,m=1,u=t.length;m")<0&&w.indexOf("=>")<0&&w.indexOf("@>")<0?(c[_-1]+="\n"+w,c.splice(_,1),v--):_++}for(;c.length>0;){var L=c.splice(0,1)[0].trim();if(L.indexOf("=>")>=0){var k=L.split("=>"),B={key:k[0].replace(/\(.*\)/,""),symbolType:k[1],text:null,link:null,target:null,flowstate:null,function:null,lineStyle:{},params:{}},A=k[0].match(/\((.*)\)/);if(A&&A.length>1)for(var M=A[1].split(","),O=0;O=0&&(T=B.symbolType.split(": "),B.symbolType=T.shift(),B.text=T.join(": ")),B.text&&B.text.indexOf(":$")>=0?(T=B.text.split(":$"),B.text=T.shift(),B.function=T.join(":$")):B.symbolType.indexOf(":$")>=0?(T=B.symbolType.split(":$"),B.symbolType=T.shift(),B.function=T.join(":$")):B.text&&B.text.indexOf(":>")>=0?(T=B.text.split(":>"),B.text=T.shift(),B.link=T.join(":>")):B.symbolType.indexOf(":>")>=0&&(T=B.symbolType.split(":>"),B.symbolType=T.shift(),B.link=T.join(":>")),B.symbolType.indexOf("\n")>=0&&(B.symbolType=B.symbolType.split("\n")[0]),B.link){var S=B.link.indexOf("[")+1,C=B.link.indexOf("]");S>=0&&C>=0&&(B.target=B.link.substring(S,C),B.link=B.link.substring(0,S-1))}if(B.text&&B.text.indexOf("|")>=0){var Y=B.text.split("|");B.flowstate=Y.pop().trim(),B.text=Y.join("|")}f.symbols[B.key]=B}else if(L.indexOf("->")>=0){var P=g(L);P&&(L=L.replace("@"+P,""));for(var j=L.split("->"),E=0,z=j.length;E=0){var G=$.split(",");$=G[0],V=G[1].trim()}if(P&&("yes"==$||"true"==$?N.yes_annotation=P:N.no_annotation=P,P=null),f.start||(f.start=N),E+1")>=0)for(var W=L.split("@>"),Q=0,q=W.length;Qs.right_symbol.getCenter().y&&r<=s.right_symbol.width/2){n=!0;break}}if(n){if("end"===s.right_symbol.symbolType)return;s.right_symbol.setX(e.getX()+e.width+t),i()}}(),this.right_symbol.isPositioned=!0,this.right_symbol.render()}}if(this.left_symbol){var n=this.getLeft();if(!this.left_symbol.isPositioned){this.left_symbol.setY(n.y-this.left_symbol.height/2),this.left_symbol.shiftX(-(this.group.getBBox().x+this.width+t));var s=this;!function i(){for(var e,n=!1,h=0,o=s.chart.symbols.length;hs.left_symbol.getCenter().y&&r<=s.left_symbol.width/2){n=!0;break}}if(n){if("end"===s.left_symbol.symbolType)return;s.left_symbol.setX(e.getX()+e.width+t),i()}}(),this.left_symbol.isPositioned=!0,this.left_symbol.render()}}},s.prototype.renderLines=function(){this.yes_symbol&&this.drawLineTo(this.yes_symbol,this.yes_annotation?this.yes_annotation:this.getAttr("yes-text"),this.yes_direction),this.no_symbol&&this.drawLineTo(this.no_symbol,this.no_annotation?this.no_annotation:this.getAttr("no-text"),this.no_direction)},t.exports=s},function(t,i,e){function s(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},n.call(this,t,i,e),this.textMargin=this.getAttr("text-margin"),this.path1_direction="bottom",this.path2_direction="right",this.path3_direction="top",this.params=i.params,"path1"===i.direction_next&&!i[i.direction_next]&&i.next&&(i[i.direction_next]=i.next),"path2"===i.direction_next&&!i[i.direction_next]&&i.next&&(i[i.direction_next]=i.next),"path3"===i.direction_next&&!i[i.direction_next]&&i.next&&(i[i.direction_next]=i.next),i.path1&&i.direction_path1&&i.path2&&!i.direction_path2&&i.path3&&!i.direction_path3?"right"===i.direction_path1?(this.path2_direction="bottom",this.path1_direction="right",this.path3_direction="top"):"top"===i.direction_path1?(this.path2_direction="right",this.path1_direction="top",this.path3_direction="bottom"):"left"===i.direction_path1?(this.path2_direction="right",this.path1_direction="left",this.path3_direction="bottom"):(this.path2_direction="right",this.path1_direction="bottom",this.path3_direction="top"):i.path1&&!i.direction_path1&&i.path2&&i.direction_path2&&i.path3&&!i.direction_path3?"right"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="right",this.path3_direction="top"):"left"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="left",this.path3_direction="right"):(this.path1_direction="right",this.path2_direction="bottom",this.path3_direction="top"):i.path1&&!i.direction_path1&&i.path2&&!i.direction_path2&&i.path3&&i.direction_path3?"right"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="top",this.path3_direction="right"):"left"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="right",this.path3_direction="left"):(this.path1_direction="right",this.path2_direction="bottom",this.path3_direction="top"):(this.path1_direction=i.direction_path1,this.path2_direction=i.direction_path2,this.path3_direction=i.direction_path3),this.path1_direction=this.path1_direction||"bottom",this.path2_direction=this.path2_direction||"right",this.path3_direction=this.path3_direction||"top",this.initialize()}var n=e(2),h=e(1).inherits;h(s,n),s.prototype.render=function(){this.path1_direction&&(this[this.path1_direction+"_symbol"]=this.path1_symbol),this.path2_direction&&(this[this.path2_direction+"_symbol"]=this.path2_symbol),this.path3_direction&&(this[this.path3_direction+"_symbol"]=this.path3_symbol);var t=this.getAttr("line-length");if(this.bottom_symbol){var i=this.getBottom();this.bottom_symbol.isPositioned||(this.bottom_symbol.shiftY(this.getY()+this.height+t),this.bottom_symbol.setX(i.x-this.bottom_symbol.width/2),this.bottom_symbol.isPositioned=!0,this.bottom_symbol.render())}if(this.top_symbol){var e=this.getTop();this.top_symbol.isPositioned||(this.top_symbol.shiftY(this.getY()-this.top_symbol.height-t),this.top_symbol.setX(e.x+this.top_symbol.width),this.top_symbol.isPositioned=!0,this.top_symbol.render())}var s=this;if(this.left_symbol){var n=this.getLeft();this.left_symbol.isPositioned||(this.left_symbol.setY(n.y-this.left_symbol.height/2),this.left_symbol.shiftX(-(this.group.getBBox().x+this.width+t)),function i(){for(var e,n=!1,h=0,o=s.chart.symbols.length;hs.left_symbol.getCenter().y&&r<=s.left_symbol.width/2){n=!0;break}}if(n){if("end"===s.left_symbol.symbolType)return;s.left_symbol.setX(e.getX()+e.width+t),i()}}(),this.left_symbol.isPositioned=!0,this.left_symbol.render())}if(this.right_symbol){var h=this.getRight();this.right_symbol.isPositioned||(this.right_symbol.setY(h.y-this.right_symbol.height/2),this.right_symbol.shiftX(this.group.getBBox().x+this.width+t),function i(){for(var e,n=!1,h=0,o=s.chart.symbols.length;hs.right_symbol.getCenter().y&&r<=s.right_symbol.width/2){n=!0;break}}if(n){if("end"===s.right_symbol.symbolType)return;s.right_symbol.setX(e.getX()+e.width+t),i()}}(),this.right_symbol.isPositioned=!0,this.right_symbol.render())}},s.prototype.renderLines=function(){this.path1_symbol&&this.drawLineTo(this.path1_symbol,"",this.path1_direction),this.path2_symbol&&this.drawLineTo(this.path2_symbol,"",this.path2_direction),this.path3_symbol&&this.drawLineTo(this.path3_symbol,"",this.path3_direction)},t.exports=s},function(t,i,e){function s(t,i){i=i||{},this.paper=new n(t),this.options=h(i,o),this.symbols=[],this.lines=[],this.start=null}var n=e(16),h=e(1).defaults,o=e(8),r=e(5),a=e(6);s.prototype.handle=function(t){this.symbols.indexOf(t)<=-1&&this.symbols.push(t);var i=this;return t instanceof r?(t.yes=function(e){return t.yes_symbol=e,t.no_symbol&&(t.pathOk=!0),i.handle(e)},t.no=function(e){return t.no_symbol=e,t.yes_symbol&&(t.pathOk=!0),i.handle(e)}):t instanceof a?(t.path1=function(e){return t.path1_symbol=e,t.path2_symbol&&(t.pathOk=!0),i.handle(e)},t.path2=function(e){return t.path2_symbol=e,t.path3_symbol&&(t.pathOk=!0),i.handle(e)},t.path3=function(e){return t.path3_symbol=e,t.path1_symbol&&(t.pathOk=!0),i.handle(e)}):t.then=function(e){return t.next=e,t.pathOk=!0,i.handle(e)},t},s.prototype.startWith=function(t){return this.start=t,this.handle(t)},s.prototype.render=function(){var t,i,e=0,s=0,n=0,h=0,o=0,r=0,a=0,l=0;for(n=0,h=this.symbols.length;ne&&(e=t.width),t.height>s&&(s=t.height);for(n=0,h=this.symbols.length;no&&(o=p),y>r&&(r=y)}for(n=0,h=this.lines.length;no&&(o=g),f>r&&(r=f)}var c=this.options.scale,d=this.options["line-width"];this.minXFromSymbols>>0;if(0===e)return-1;var s=0;if(arguments.length>0&&(s=Number(arguments[1]),s!=s?s=0:0!==s&&s!=1/0&&s!=-(1/0)&&(s=(s>0||-1)*Math.floor(Math.abs(s)))),s>=e)return-1;for(var n=s>=0?s:Math.max(e-Math.abs(s),0);n>>0;if(0===e)return-1;var s=e;arguments.length>1&&(s=Number(arguments[1]),s!=s?s=0:0!==s&&s!=1/0&&s!=-(1/0)&&(s=(s>0||-1)*Math.floor(Math.abs(s))));for(var n=s>=0?Math.min(s,e-1):e-Math.abs(s);n>=0;n--)if(n in i&&i[n]===t)return n;return-1}),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")})},function(t,i,e){function s(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"End",n.call(this,t,i,e)}var n=e(2),h=e(1).inherits;h(s,n),t.exports=s},function(t,i,e){function s(t,i){i=i||{},n.call(this,t,i),this.textMargin=this.getAttr("text-margin"),this.text.attr({x:3*this.textMargin});var e=this.text.getBBox().width+4*this.textMargin,s=this.text.getBBox().height+2*this.textMargin,h=this.textMargin,o=s/2,a={x:h,y:o},l=[{x:h-this.textMargin,y:s},{x:h-this.textMargin+e,y:s},{x:h-this.textMargin+e+2*this.textMargin,y:0},{x:h-this.textMargin+2*this.textMargin,y:0},{x:h,y:o}],p=r(t,a,l);p.attr({stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),fill:this.getAttr("fill")}),i.link&&p.attr("href",i.link),i.target&&p.attr("target",i.target),i.key&&(p.node.id=i.key),p.node.setAttribute("class",this.getAttr("class")),this.text.attr({y:p.getBBox().height/2}),this.group.push(p),p.insertBefore(this.text),this.initialize()}var n=e(2),h=e(1).inherits,o=e(3),r=o.drawPath;h(s,n),s.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.textMargin;return{x:i,y:t}},s.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width-this.textMargin;return{x:i,y:t}},t.exports=s},function(t,i,e){function s(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},n.call(this,t,i,e)}var n=e(2),h=e(1).inherits;h(s,n),t.exports=s},function(t,i,e){function s(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"Start",n.call(this,t,i,e)}var n=e(2),h=e(1).inherits;h(s,n),t.exports=s},function(t,i,e){function s(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},n.call(this,t,i,e),e.attr({width:this.text.getBBox().width+4*this.getAttr("text-margin")}),this.text.attr({x:2*this.getAttr("text-margin")});var s=t.paper.rect(0,0,0,0);s.attr({x:this.getAttr("text-margin"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*this.getAttr("text-margin"),height:this.text.getBBox().height+2*this.getAttr("text-margin"),fill:this.getAttr("fill")}),i.key&&(s.node.id=i.key+"i");var h=this.getAttr("font"),o=this.getAttr("font-family"),r=this.getAttr("font-weight");h&&s.attr({font:h}),o&&s.attr({"font-family":o}),r&&s.attr({"font-weight":r}),i.link&&s.attr("href",i.link),i.target&&s.attr("target",i.target),this.group.push(s),s.insertBefore(this.text),this.initialize()}var n=e(2),h=e(1).inherits;h(s,n),t.exports=s},function(t,i,e){if("undefined"!=typeof jQuery){var s=e(4);!function(t){function i(t,i){return t==i||Array.isArray(i)&&(i.includes(t)||i.includes(Number(t)))}var e={init:function(i){return this.each(function(){var e=t(this);this.chart=s(e.text()),e.html(""),this.chart.drawSVG(this,i)})},setFlowStateByParam:function(t,e,s){return this.each(function(){var n=this.chart,h=["next","yes","no","path1","path2","path3"];for(var o in n.symbols)if(n.symbols.hasOwnProperty(o)){var r=n.symbols[o],a=r.params[t];if(i(a,e)){r.flowstate=s;for(var l=0;lh?"\n"+y:" "+y}this.text.attr("text",a.substring(1))}if(this.group.push(this.text),e){var x=this.getAttr("text-margin");e.attr({fill:this.getAttr("fill"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*x,height:this.text.getBBox().height+2*x}),e.node.setAttribute("class",this.getAttr("class")),i.link&&e.attr("href",i.link),i.target&&e.attr("target",i.target),i.function&&(e.node.addEventListener("click",function(t){window[i.function](t,i)},!1),e.attr({cursor:"pointer"})),i.key&&(e.node.id=i.key),this.group.push(e),e.insertBefore(this.text),this.text.attr({y:e.getBBox().height/2}),this.initialize()}}var n=e(3),o=n.drawLine,h=n.checkLineIntersection;s.prototype.getAttr=function(t){if(this.chart){var i,e=this.chart.options?this.chart.options[t]:void 0,s=this.chart.options.symbols?this.chart.options.symbols[this.symbolType][t]:void 0;return this.chart.options.flowstate&&this.chart.options.flowstate[this.flowstate]&&(i=this.chart.options.flowstate[this.flowstate][t]),i||s||e}},s.prototype.initialize=function(){this.group.transform("t"+this.getAttr("line-width")+","+this.getAttr("line-width")),this.width=this.group.getBBox().width,this.height=this.group.getBBox().height},s.prototype.getCenter=function(){return{x:this.getX()+this.width/2,y:this.getY()+this.height/2}},s.prototype.getX=function(){return this.group.getBBox().x},s.prototype.getY=function(){return this.group.getBBox().y},s.prototype.shiftX=function(t){this.group.transform("t"+(this.getX()+t)+","+this.getY())},s.prototype.setX=function(t){this.group.transform("t"+t+","+this.getY())},s.prototype.shiftY=function(t){this.group.transform("t"+this.getX()+","+(this.getY()+t))},s.prototype.setY=function(t){this.group.transform("t"+this.getX()+","+t)},s.prototype.getTop=function(){var t=this.getY(),i=this.getX()+this.width/2;return{x:i,y:t}},s.prototype.getBottom=function(){var t=this.getY()+this.height,i=this.getX()+this.width/2;return{x:i,y:t}},s.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX();return{x:i,y:t}},s.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width;return{x:i,y:t}},s.prototype.render=function(){if(this.next){var t=this,i=this.getAttr("line-length");if("right"===this.next_direction){var e=this.getRight();this.next.isPositioned||(this.next.setY(e.y-this.next.height/2),this.next.shiftX(this.group.getBBox().x+this.width+i),function e(){for(var s,n=!1,o=0,h=t.chart.symbols.length;ot.next.getCenter().y&&r<=t.next.width/2){n=!0;break}}if(n){if("end"===t.next.symbolType)return;t.next.setX(s.getX()+s.width+i),e()}}(),this.next.isPositioned=!0,this.next.render())}else if("left"===this.next_direction){var s=this.getLeft();this.next.isPositioned||(this.next.setY(s.y-this.next.height/2),this.next.shiftX(-(this.group.getBBox().x+this.width+i)),function e(){for(var s,n=!1,o=0,h=t.chart.symbols.length;ot.next.getCenter().y&&r<=t.next.width/2){n=!0;break}}if(n){if("end"===t.next.symbolType)return;t.next.setX(s.getX()+s.width+i),e()}}(),this.next.isPositioned=!0,this.next.render())}else{var n=this.getBottom();this.next.isPositioned||(this.next.shiftY(this.getY()+this.height+i),this.next.setX(n.x-this.next.width/2),this.next.isPositioned=!0,this.next.render())}}},s.prototype.renderLines=function(){this.next&&(this.next_direction?this.drawLineTo(this.next,this.getAttr("arrow-text")||"",this.next_direction):this.drawLineTo(this.next,this.getAttr("arrow-text")||""))},s.prototype.drawLineTo=function(t,i,e){this.connectedTo.indexOf(t)<0&&this.connectedTo.push(t);var s,n,r=this.getCenter().x,a=this.getCenter().y,l=this.getRight(),p=this.getBottom(),y=this.getTop(),x=this.getLeft(),g=t.getCenter().x,f=t.getCenter().y,c=t.getTop(),d=t.getRight(),m=t.getLeft(),u=r===g,b=a===f,_=af||this===t,w=r>g,L=rk&&(k=c.x);else n=10*Math.max(t.topLines.length,this.bottomLines.length),s=this.leftEnd&&v?o(this.chart,p,[{x:p.x,y:p.y+B/2-n},{x:p.x+(p.x-c.x)/2,y:p.y+B/2-n},{x:p.x+(p.x-c.x)/2,y:c.y-B/2-n},{x:c.x,y:c.y-B/2-n},{x:c.x,y:c.y}],i):o(this.chart,p,[{x:p.x,y:c.y-B/2-n},{x:c.x,y:c.y-B/2-n},{x:c.x,y:c.y}],i),this.bottomLines.push(s),t.topLines.push(s),this.bottomStart=!0,t.topEnd=!0,k=p.x+(p.x-c.x)/2;else n=10*Math.max(t.topLines.length,this.rightLines.length),s=o(this.chart,l,[{x:l.x+B/2,y:l.y-n},{x:l.x+B/2,y:c.y-B/2-n},{x:c.x,y:c.y-B/2-n},{x:c.x,y:c.y}],i),this.rightLines.push(s),t.topLines.push(s),this.rightStart=!0,t.topEnd=!0,k=l.x+B/2;else n=10*Math.max(t.topLines.length,this.rightLines.length),s=o(this.chart,l,[{x:l.x+B/2,y:l.y-n},{x:l.x+B/2,y:c.y-B/2-n},{x:c.x,y:c.y-B/2-n},{x:c.x,y:c.y}],i),this.rightLines.push(s),t.topLines.push(s),this.rightStart=!0,t.topEnd=!0,k=l.x+B/2;else 0===t.rightLines.length&&0===this.leftLines.length?s=o(this.chart,x,d,i):(n=10*Math.max(t.rightLines.length,this.leftLines.length),s=o(this.chart,l,[{x:l.x,y:l.y-n},{x:l.x,y:d.y-n},{x:d.x,y:d.y-n},{x:d.x,y:d.y}],i)),this.leftLines.push(s),t.rightLines.push(s),this.leftStart=!0,t.rightEnd=!0,k=d.x;else 0===t.leftLines.length&&0===this.rightLines.length?s=o(this.chart,l,m,i):(n=10*Math.max(t.leftLines.length,this.rightLines.length),s=o(this.chart,l,[{x:l.x,y:l.y-n},{x:l.x,y:m.y-n},{x:m.x,y:m.y-n},{x:m.x,y:m.y}],i)),this.rightLines.push(s),t.leftLines.push(s),this.rightStart=!0,t.leftEnd=!0,k=m.x;else 0===t.topLines.length&&0===this.bottomLines.length?s=o(this.chart,p,c,i):(n=10*Math.max(t.topLines.length,this.bottomLines.length),s=o(this.chart,p,[{x:c.x,y:c.y-n},{x:c.x,y:c.y}],i)),this.bottomLines.push(s),t.topLines.push(s),this.bottomStart=!0,t.topEnd=!0,k=p.x;if(this.lineStyle[t.key]&&s&&s.attr(this.lineStyle[t.key]),s){for(var O=0,X=this.chart.lines.length;OW?(J=["L",q.x+2*A,I],C.splice($+1,0,J),J=["C",q.x+2*A,I,q.x,I-4*A,q.x-2*A,I],C.splice($+2,0,J),s.attr("path",C)):(J=["L",q.x-2*A,I],C.splice($+1,0,J),J=["C",q.x-2*A,I,q.x,I-4*A,q.x+2*A,I],C.splice($+2,0,J),s.attr("path",C)):I>Q?(J=["L",G,q.y+2*A],C.splice($+1,0,J),J=["C",G,q.y+2*A,G+4*A,q.y,G,q.y-2*A],C.splice($+2,0,J),s.attr("path",C)):(J=["L",G,q.y-2*A],C.splice($+1,0,J),J=["C",G,q.y-2*A,G+4*A,q.y,G,q.y+2*A],C.splice($+2,0,J),s.attr("path",C)),$+=2}}}this.chart.lines.push(s),(void 0===this.chart.minXFromSymbols||this.chart.minXFromSymbols>x.x)&&(this.chart.minXFromSymbols=x.x)}(!this.chart.maxXFromLine||this.chart.maxXFromLine&&k>this.chart.maxXFromLine)&&(this.chart.maxXFromLine=k)},t.exports=s},function(t,i){function e(t,i,e){var s,n,o="M{0},{1}";for(s=2,n=2*e.length+2;sd.x?i.x-(i.x-d.x)/2:d.x-(d.x-i.x)/2,u=i.y>d.y?i.y-(i.y-d.y)/2:d.y-(d.y-i.y)/2,c?(m-=g.getBBox().width/2,u-=t.options["text-margin"]):(m+=t.options["text-margin"],u-=g.getBBox().height/2)):(m=i.x,u=i.y,c?(i.x>d.x?(m-=t.options["text-margin"]/2,f="end"):m+=t.options["text-margin"]/2,u-=t.options["text-margin"]):(m+=t.options["text-margin"]/2,u+=t.options["text-margin"],i.y>d.y&&(u-=2*t.options["text-margin"]))),g.attr({"text-anchor":f,"font-size":t.options["font-size"],fill:t.options["font-color"],x:m,y:u}),l&&g.attr({font:l}),p&&g.attr({"font-family":p}),y&&g.attr({"font-weight":y})}return a}function n(t,i,e,s,n,o,h,r){var a,l,p,y,x,g={x:null,y:null,onLine1:!1,onLine2:!1};return a=(r-o)*(e-t)-(h-n)*(s-i),0===a?g:(l=i-o,p=t-n,y=(h-n)*l-(r-o)*p,x=(e-t)*l-(s-i)*p,l=y/a,p=x/a,g.x=t+l*(e-t),g.y=i+l*(s-i),l>0&&l<1&&(g.onLine1=!0),p>0&&p<1&&(g.onLine2=!0),g)}t.exports={drawPath:e,drawLine:s,checkLineIntersection:n}},function(t,i,e){function s(t){function i(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?t.substring(i,e):"{}"}function e(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?t.substring(i,e):""}function s(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?f.symbols[t.substring(0,i-1)]:f.symbols[t]}function x(t){var i="next",e=t.indexOf("(")+1,s=t.indexOf(")");return e>=0&&s>=0&&(i=F.substring(e,s),i.indexOf(",")<0&&"yes"!==i&&"no"!==i&&(i="next, "+i)),i}function g(t){var i=t.indexOf("(")+1,e=t.indexOf(")"),s=t.substring(i,e);s.indexOf(",")>0&&(s=s.substring(0,s.indexOf(",")));var n=s.split("@");if(n.length>1)return i>=0&&e>=0?n[1]:""}t=t||"",t=t.trim();for(var f={symbols:{},start:null,drawSVG:function(t,i){function e(t){if(g[t.key])return g[t.key];switch(t.symbolType){case"start":g[t.key]=new o(x,t);break;case"end":g[t.key]=new h(x,t);break;case"operation":g[t.key]=new r(x,t);break;case"inputoutput":g[t.key]=new a(x,t);break;case"subroutine":g[t.key]=new l(x,t);break;case"condition":g[t.key]=new p(x,t);break;case"parallel":g[t.key]=new y(x,t);break;default:return new Error("Wrong symbol type!")}return g[t.key]}var s=this;this.diagram&&this.diagram.clean();var x=new n(t,i);this.diagram=x;var g={};!function t(i,n,o){var h=e(i);return s.start===i?x.startWith(h):n&&o&&!n.pathOk&&(n instanceof p?(o.yes===i&&n.yes(h),o.no===i&&n.no(h)):n instanceof y?(o.path1===i&&n.path1(h),o.path2===i&&n.path2(h),o.path3===i&&n.path3(h)):n.then(h)),h.pathOk?h:(h instanceof p?(i.yes&&t(i.yes,h,i),i.no&&t(i.no,h,i)):h instanceof y?(i.path1&&t(i.path1,h,i),i.path2&&t(i.path2,h,i),i.path3&&t(i.path3,h,i)):i.next&&t(i.next,h,i),h)}(this.start),x.render()},clean:function(){this.diagram.clean()},options:function(){return this.diagram.options}},c=[],d=0,m=1,u=t.length;m")<0&&w.indexOf("=>")<0&&w.indexOf("@>")<0?(c[_-1]+="\n"+w,c.splice(_,1),v--):_++}for(;c.length>0;){var L=c.splice(0,1)[0].trim();if(L.indexOf("=>")>=0){var k=L.split("=>"),B={key:k[0].replace(/\(.*\)/,""),symbolType:k[1],text:null,link:null,target:null,flowstate:null,function:null,lineStyle:{},params:{}},A=k[0].match(/\((.*)\)/);if(A&&A.length>1)for(var M=A[1].split(","),O=0;O=0&&(T=B.symbolType.split(": "),B.symbolType=T.shift(),B.text=T.join(": ")),B.text&&B.text.indexOf(":$")>=0?(T=B.text.split(":$"),B.text=T.shift(),B.function=T.join(":$")):B.symbolType.indexOf(":$")>=0?(T=B.symbolType.split(":$"),B.symbolType=T.shift(),B.function=T.join(":$")):B.text&&B.text.indexOf(":>")>=0?(T=B.text.split(":>"),B.text=T.shift(),B.link=T.join(":>")):B.symbolType.indexOf(":>")>=0&&(T=B.symbolType.split(":>"),B.symbolType=T.shift(),B.link=T.join(":>")),B.symbolType.indexOf("\n")>=0&&(B.symbolType=B.symbolType.split("\n")[0]),B.link){var S=B.link.indexOf("[")+1,C=B.link.indexOf("]");S>=0&&C>=0&&(B.target=B.link.substring(S,C),B.link=B.link.substring(0,S-1))}if(B.text&&B.text.indexOf("|")>=0){var Y=B.text.split("|");B.flowstate=Y.pop().trim(),B.text=Y.join("|")}f.symbols[B.key]=B}else if(L.indexOf("->")>=0){var P=g(L);P&&(L=L.replace("@"+P,""));for(var j=L.split("->"),E=0,z=j.length;E=0){var G=$.split(",");$=G[0],V=G[1].trim()}if(P&&("condition"===N.symbolType?"yes"===$||"true"===$?N.yes_annotation=P:N.no_annotation=P:"parallel"===N.symbolType&&("path1"===$?N.path1_annotation=P:"path2"===$?N.path2_annotation=P:"path3"===$&&(N.path3_annotation=P)),P=null),f.start||(f.start=N),E+1")>=0)for(var W=L.split("@>"),Q=0,q=W.length;Qt.right_symbol.getCenter().y&&r<=t.right_symbol.width/2){n=!0;break}}if(n){if("end"===t.right_symbol.symbolType)return;t.right_symbol.setX(s.getX()+s.width+i),e()}}(),this.right_symbol.isPositioned=!0,this.right_symbol.render())}if(this.left_symbol){var n=this.getLeft();this.left_symbol.isPositioned||(this.left_symbol.setY(n.y-this.left_symbol.height/2),this.left_symbol.shiftX(-(this.group.getBBox().x+this.width+i)),function e(){for(var s,n=!1,o=0,h=t.chart.symbols.length;ot.left_symbol.getCenter().y&&r<=t.left_symbol.width/2){n=!0;break}}if(n){if("end"===t.left_symbol.symbolType)return;t.left_symbol.setX(s.getX()+s.width+i),e()}}(),this.left_symbol.isPositioned=!0,this.left_symbol.render())}},s.prototype.renderLines=function(){this.yes_symbol&&this.drawLineTo(this.yes_symbol,this.yes_annotation?this.yes_annotation:this.getAttr("yes-text"),this.yes_direction),this.no_symbol&&this.drawLineTo(this.no_symbol,this.no_annotation?this.no_annotation:this.getAttr("no-text"),this.no_direction)},t.exports=s},function(t,i,e){function s(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},n.call(this,t,i,e),this.path1_annotation=i.path1_annotation||"",this.path2_annotation=i.path2_annotation||"",this.path3_annotation=i.path3_annotation||"",this.textMargin=this.getAttr("text-margin"),this.path1_direction="bottom",this.path2_direction="right",this.path3_direction="top",this.params=i.params,"path1"===i.direction_next&&!i[i.direction_next]&&i.next&&(i[i.direction_next]=i.next),"path2"===i.direction_next&&!i[i.direction_next]&&i.next&&(i[i.direction_next]=i.next),"path3"===i.direction_next&&!i[i.direction_next]&&i.next&&(i[i.direction_next]=i.next),i.path1&&i.direction_path1&&i.path2&&!i.direction_path2&&i.path3&&!i.direction_path3?"right"===i.direction_path1?(this.path2_direction="bottom",this.path1_direction="right",this.path3_direction="top"):"top"===i.direction_path1?(this.path2_direction="right",this.path1_direction="top",this.path3_direction="bottom"):"left"===i.direction_path1?(this.path2_direction="right",this.path1_direction="left",this.path3_direction="bottom"):(this.path2_direction="right",this.path1_direction="bottom",this.path3_direction="top"):i.path1&&!i.direction_path1&&i.path2&&i.direction_path2&&i.path3&&!i.direction_path3?"right"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="right",this.path3_direction="top"):"left"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="left",this.path3_direction="right"):(this.path1_direction="right",this.path2_direction="bottom",this.path3_direction="top"):i.path1&&!i.direction_path1&&i.path2&&!i.direction_path2&&i.path3&&i.direction_path3?"right"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="top",this.path3_direction="right"):"left"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="right",this.path3_direction="left"):(this.path1_direction="right",this.path2_direction="bottom",this.path3_direction="top"):(this.path1_direction=i.direction_path1,this.path2_direction=i.direction_path2,this.path3_direction=i.direction_path3),this.path1_direction=this.path1_direction||"bottom",this.path2_direction=this.path2_direction||"right",this.path3_direction=this.path3_direction||"top",this.initialize()}var n=e(2),o=e(1).inherits;o(s,n),s.prototype.render=function(){this.path1_direction&&(this[this.path1_direction+"_symbol"]=this.path1_symbol),this.path2_direction&&(this[this.path2_direction+"_symbol"]=this.path2_symbol),this.path3_direction&&(this[this.path3_direction+"_symbol"]=this.path3_symbol);var t=this.getAttr("line-length");if(this.bottom_symbol){var i=this.getBottom();this.bottom_symbol.isPositioned||(this.bottom_symbol.shiftY(this.getY()+this.height+t),this.bottom_symbol.setX(i.x-this.bottom_symbol.width/2),this.bottom_symbol.isPositioned=!0,this.bottom_symbol.render())}if(this.top_symbol){var e=this.getTop();this.top_symbol.isPositioned||(this.top_symbol.shiftY(this.getY()-this.top_symbol.height-t),this.top_symbol.setX(e.x+this.top_symbol.width),this.top_symbol.isPositioned=!0,this.top_symbol.render())}var s=this;if(this.left_symbol){var n=this.getLeft();this.left_symbol.isPositioned||(this.left_symbol.setY(n.y-this.left_symbol.height/2),this.left_symbol.shiftX(-(this.group.getBBox().x+this.width+t)),function i(){for(var e,n=!1,o=0,h=s.chart.symbols.length;os.left_symbol.getCenter().y&&r<=s.left_symbol.width/2){n=!0;break}}if(n){if("end"===s.left_symbol.symbolType)return;s.left_symbol.setX(e.getX()+e.width+t),i()}}(),this.left_symbol.isPositioned=!0,this.left_symbol.render())}if(this.right_symbol){var o=this.getRight();this.right_symbol.isPositioned||(this.right_symbol.setY(o.y-this.right_symbol.height/2),this.right_symbol.shiftX(this.group.getBBox().x+this.width+t),function i(){for(var e,n=!1,o=0,h=s.chart.symbols.length;os.right_symbol.getCenter().y&&r<=s.right_symbol.width/2){n=!0;break}}if(n){if("end"===s.right_symbol.symbolType)return;s.right_symbol.setX(e.getX()+e.width+t),i()}}(),this.right_symbol.isPositioned=!0,this.right_symbol.render())}},s.prototype.renderLines=function(){this.path1_symbol&&this.drawLineTo(this.path1_symbol,this.path1_annotation,this.path1_direction),this.path2_symbol&&this.drawLineTo(this.path2_symbol,this.path2_annotation,this.path2_direction),this.path3_symbol&&this.drawLineTo(this.path3_symbol,this.path3_annotation,this.path3_direction)},t.exports=s},function(t,i,e){function s(t,i){i=i||{},this.paper=new n(t),this.options=o(i,h),this.symbols=[],this.lines=[],this.start=null}var n=e(16),o=e(1).defaults,h=e(8),r=e(5),a=e(6);s.prototype.handle=function(t){this.symbols.indexOf(t)<=-1&&this.symbols.push(t);var i=this;return t instanceof r?(t.yes=function(e){return t.yes_symbol=e,t.no_symbol&&(t.pathOk=!0),i.handle(e)},t.no=function(e){return t.no_symbol=e,t.yes_symbol&&(t.pathOk=!0),i.handle(e)}):t instanceof a?(t.path1=function(e){return t.path1_symbol=e,t.path2_symbol&&(t.pathOk=!0),i.handle(e)},t.path2=function(e){return t.path2_symbol=e,t.path3_symbol&&(t.pathOk=!0),i.handle(e)},t.path3=function(e){return t.path3_symbol=e,t.path1_symbol&&(t.pathOk=!0),i.handle(e)}):t.then=function(e){return t.next=e,t.pathOk=!0,i.handle(e)},t},s.prototype.startWith=function(t){return this.start=t,this.handle(t)},s.prototype.render=function(){var t,i,e=0,s=0,n=0,o=0,h=0,r=0,a=0,l=0;for(n=0,o=this.symbols.length;ne&&(e=t.width),t.height>s&&(s=t.height);for(n=0,o=this.symbols.length;nh&&(h=p),y>r&&(r=y)}for(n=0,o=this.lines.length;nh&&(h=g),f>r&&(r=f)}var c=this.options.scale,d=this.options["line-width"];this.minXFromSymbols>>0;if(0===e)return-1;var s=0;if(arguments.length>0&&(s=Number(arguments[1]),s!=s?s=0:0!==s&&s!=1/0&&s!=-(1/0)&&(s=(s>0||-1)*Math.floor(Math.abs(s)))),s>=e)return-1;for(var n=s>=0?s:Math.max(e-Math.abs(s),0);n>>0;if(0===e)return-1;var s=e;arguments.length>1&&(s=Number(arguments[1]),s!=s?s=0:0!==s&&s!=1/0&&s!=-(1/0)&&(s=(s>0||-1)*Math.floor(Math.abs(s))));for(var n=s>=0?Math.min(s,e-1):e-Math.abs(s);n>=0;n--)if(n in i&&i[n]===t)return n;return-1}),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")})},function(t,i,e){function s(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"End",n.call(this,t,i,e)}var n=e(2),o=e(1).inherits;o(s,n),t.exports=s},function(t,i,e){function s(t,i){i=i||{},n.call(this,t,i),this.textMargin=this.getAttr("text-margin"),this.text.attr({x:3*this.textMargin});var e=this.text.getBBox().width+4*this.textMargin,s=this.text.getBBox().height+2*this.textMargin,o=this.textMargin,h=s/2,a={x:o,y:h},l=[{x:o-this.textMargin,y:s},{x:o-this.textMargin+e,y:s},{x:o-this.textMargin+e+2*this.textMargin,y:0},{x:o-this.textMargin+2*this.textMargin,y:0},{x:o,y:h}],p=r(t,a,l);p.attr({stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),fill:this.getAttr("fill")}),i.link&&p.attr("href",i.link),i.target&&p.attr("target",i.target),i.key&&(p.node.id=i.key),p.node.setAttribute("class",this.getAttr("class")),this.text.attr({y:p.getBBox().height/2}),this.group.push(p),p.insertBefore(this.text),this.symbol=p,this.initialize()}var n=e(2),o=e(1).inherits,h=e(3),r=h.drawPath;o(s,n),s.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.textMargin;return{x:i,y:t}},s.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width-this.textMargin;return{x:i,y:t}},t.exports=s},function(t,i,e){function s(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},n.call(this,t,i,e)}var n=e(2),o=e(1).inherits;o(s,n),t.exports=s},function(t,i,e){function s(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"Start",n.call(this,t,i,e)}var n=e(2),o=e(1).inherits;o(s,n),t.exports=s},function(t,i,e){function s(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},n.call(this,t,i,e),e.attr({width:this.text.getBBox().width+4*this.getAttr("text-margin")}),this.text.attr({x:2*this.getAttr("text-margin")});var s=t.paper.rect(0,0,0,0);s.attr({x:this.getAttr("text-margin"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*this.getAttr("text-margin"),height:this.text.getBBox().height+2*this.getAttr("text-margin"),fill:this.getAttr("fill")}),i.key&&(s.node.id=i.key+"i");var o=this.getAttr("font"),h=this.getAttr("font-family"),r=this.getAttr("font-weight");o&&s.attr({font:o}),h&&s.attr({"font-family":h}),r&&s.attr({"font-weight":r}),i.link&&s.attr("href",i.link),i.target&&s.attr("target",i.target),this.group.push(s),s.insertBefore(this.text),this.initialize()}var n=e(2),o=e(1).inherits;o(s,n),t.exports=s},function(t,i,e){if("undefined"!=typeof jQuery){var s=e(4);!function(t){function i(t,i){return t==i||Array.isArray(i)&&(i.includes(t)||i.includes(Number(t)))}var e={init:function(i){return this.each(function(){var e=t(this);this.chart=s(e.text()),e.html(""),this.chart.drawSVG(this,i)})},setFlowStateByParam:function(t,e,s){ +return this.each(function(){var n=this.chart,o=["next","yes","no","path1","path2","path3"];for(var h in n.symbols)if(n.symbols.hasOwnProperty(h)){var r=n.symbols[h],a=r.params[t];if(i(a,e)){r.flowstate=s;for(var l=0;l maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t\n\t //ndrqu Add click function with event and options params\n\t if (options.function) { \n\t symbol.node.addEventListener(\"click\", function(evt) {\n\t window[options.function](evt,options);\n\t }, false);\n\t symbol.attr({ 'cursor' : 'pointer' });\n\t }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var self = this;\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.next.symbolType === 'end') return;\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else if (this.next_direction === 'left') {\n\t\n\t var leftPoint = this.getLeft();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.setY(leftPoint.y - this.next.height/2);\n\t this.next.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.next.symbolType === 'end') return;\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, this.getAttr('arrow-text') || '', this.next_direction);\n\t } else {\n\t this.drawLineTo(this.next, this.getAttr('arrow-text') || '');\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n\t if (this.connectedTo.indexOf(symbol) < 0) {\n\t this.connectedTo.push(symbol);\n\t }\n\t\n\t var x = this.getCenter().x,\n\t y = this.getCenter().y,\n\t right = this.getRight(),\n\t bottom = this.getBottom(),\n\t top = this.getTop(),\n\t left = this.getLeft();\n\t\n\t var symbolX = symbol.getCenter().x,\n\t symbolY = symbol.getCenter().y,\n\t symbolTop = symbol.getTop(),\n\t symbolRight = symbol.getRight(),\n\t symbolLeft = symbol.getLeft();\n\t\n\t var isOnSameColumn = x === symbolX,\n\t isOnSameLine = y === symbolY,\n\t isUnder = y < symbolY,\n\t isUpper = y > symbolY || this === symbol,\n\t isLeft = x > symbolX,\n\t isRight = x < symbolX;\n\t\n\t var maxX = 0,\n\t line,\n\t yOffset,\n\t lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t if (symbol.topLines.length === 0 && this.bottomLines.length === 0) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\n\t } else {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t line = drawLine(this.chart, bottom, [\n\t {x: symbolTop.x, y: symbolTop.y - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n\t if (symbol.leftLines.length === 0 && this.rightLines.length === 0) {\n\t line = drawLine(this.chart, right, symbolLeft, text);\n\t } else {\n\t yOffset = Math.max(symbol.leftLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x, y: right.y - yOffset},\n\t {x: right.x, y: symbolLeft.y - yOffset},\n\t {x: symbolLeft.x, y: symbolLeft.y - yOffset},\n\t {x: symbolLeft.x, y: symbolLeft.y}\n\t ], text);\n\t }\n\t this.rightLines.push(line);\n\t symbol.leftLines.push(line);\n\t this.rightStart = true;\n\t symbol.leftEnd = true;\n\t maxX = symbolLeft.x;\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n\t if (symbol.rightLines.length === 0 && this.leftLines.length === 0) {\n\t line = drawLine(this.chart, left, symbolRight, text);\n\t } else {\n\t yOffset = Math.max(symbol.rightLines.length, this.leftLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x, y: right.y - yOffset},\n\t {x: right.x, y: symbolRight.y - yOffset},\n\t {x: symbolRight.x, y: symbolRight.y - yOffset},\n\t {x: symbolRight.x, y: symbolRight.y}\n\t ], text);\n\t }\n\t this.leftLines.push(line);\n\t symbol.rightLines.push(line);\n\t this.leftStart = true;\n\t symbol.rightEnd = true;\n\t maxX = symbolRight.x;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n\t yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y - yOffset},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightLines.push(line);\n\t symbol.topLines.push(line);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n\t yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y - yOffset},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightLines.push(line);\n\t symbol.topLines.push(line);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2 - yOffset},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t } else {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((!origin || origin === 'bottom') && isRight && isUnder) {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t if (symbolTop.x > maxX) maxX = symbolTop.x;\n\t } else if ((!origin || origin === 'bottom') && isRight) {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2 - yOffset},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((origin && origin === 'right') && isLeft) {\n\t yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightLines.push(line);\n\t symbol.topLines.push(line);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'right') && isRight) {\n\t yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - yOffset}\n\t ], text);\n\t this.rightLines.push(line);\n\t symbol.topLines.push(line);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2 - yOffset},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + lineLength/2;\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n\t var diffX = left.x - lineLength/2;\n\t if (symbolLeft.x < left.x) {\n\t diffX = symbolLeft.x - lineLength/2;\n\t }\n\t yOffset = Math.max(symbol.topLines.length, this.leftLines.length) * 10;\n\t line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y - yOffset},\n\t {x: diffX, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftLines.push(line);\n\t symbol.topLines.push(line);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\n\t yOffset = Math.max(symbol.topLines.length, this.leftLines.length) * 10;\n\t line = drawLine(this.chart, left, [\n\t {x: symbolTop.x + (left.x - symbolTop.x)/2, y: left.y},\n\t {x: symbolTop.x + (left.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftLines.push(line);\n\t symbol.topLines.push(line);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'top')) {\n\t yOffset = Math.max(symbol.topLines.length, this.topLines.length) * 10;\n\t line = drawLine(this.chart, top, [\n\t {x: top.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.topLines.push(line);\n\t symbol.topLines.push(line);\n\t this.topStart = true;\n\t symbol.topEnd = true;\n\t maxX = top.x;\n\t }\n\t\n\t //update line style\n\t if (this.lineStyle[symbol.key] && line){\n\t line.attr(this.lineStyle[symbol.key]);\n\t }\n\t\n\t if (line) {\n\t for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n\t var otherLine = this.chart.lines[l];\n\t\n\t var ePath = otherLine.attr('path'),\n\t lPath = line.attr('path');\n\t\n\t for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n\t var newPath = [];\n\t newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n\t newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\t\n\t var line1_from_x = newPath[0][1];\n\t var line1_from_y = newPath[0][2];\n\t var line1_to_x = newPath[1][1];\n\t var line1_to_y = newPath[1][2];\n\t\n\t for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n\t var newLinePath = [];\n\t newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n\t newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\t\n\t var line2_from_x = newLinePath[0][1];\n\t var line2_from_y = newLinePath[0][2];\n\t var line2_to_x = newLinePath[1][1];\n\t var line2_to_y = newLinePath[1][2];\n\t\n\t var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n\t if (res.onLine1 && res.onLine2) {\n\t\n\t var newSegment;\n\t if (line2_from_y === line2_to_y) {\n\t if (line2_from_x > line2_to_x) {\n\t newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t } else {\n\t if (line2_from_y > line2_to_y) {\n\t newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t }\n\t\n\t lP += 2;\n\t }\n\t }\n\t }\n\t }\n\t\n\t this.chart.lines.push(line);\n\t if (this.chart.minXFromSymbols === undefined || this.chart.minXFromSymbols > left.x) {\n\t this.chart.minXFromSymbols = left.x;\n\t }\n\t }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ }),\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ (function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t var textAnchor = 'start';\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t if (from.x > firstTo.x) {\n\t x -= chart.options['text-margin']/2;\n\t textAnchor = 'end';\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t }\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t if (from.y > firstTo.y) {\n\t y -= chart.options['text-margin']*2;\n\t }\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': textAnchor,\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ }),\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 7);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 13);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 10);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 12);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 11);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 14);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\tvar Parallel = __webpack_require__(/*! ./flowchart.symbol.parallel */ 6);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s);\n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t case 'parallel':\n\t dispSymbols[s.key] = new Parallel(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else if (prevDisp instanceof(Parallel)) {\n\t if (prev.path1 === s) {\n\t prevDisp.path1(dispSymb);\n\t }\n\t if (prev.path2 === s) {\n\t prevDisp.path2(dispSymb);\n\t }\n\t if (prev.path3 === s) {\n\t prevDisp.path3(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (dispSymb instanceof(Parallel)) {\n\t if (s.path1) {\n\t constructChart(s.path1, dispSymb, s);\n\t }\n\t if (s.path2) {\n\t constructChart(s.path2, dispSymb, s);\n\t }\n\t if (s.path3) {\n\t constructChart(s.path3, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t },\n\t options: function() {\n\t return this.diagram.options;\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if (prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getStyle(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '{}';\n\t }\n\t\n\t function getSymbValue(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '';\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)];\n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t \n\t function getAnnotation(s) {\n\t\tvar startIndex = s.indexOf(\"(\") + 1, endIndex = s.indexOf(\")\");\n\t\tvar tmp = s.substring(startIndex, endIndex);\n\t\tif(tmp.indexOf(\",\") > 0) { tmp = tmp.substring(0, tmp.indexOf(\",\")); }\n\t\tvar tmp_split = tmp.split(\"@\");\n\t\tif(tmp_split.length > 1)\n\t\t\treturn startIndex >= 0 && endIndex >= 0 ? tmp_split[1] : \"\";\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0].trim();\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0].replace(/\\(.*\\)/, ''),\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null,\n\t function: null,\n\t lineStyle: {},\n\t params: {}\n\t };\n\t\n\t //parse parameters\n\t var params = parts[0].match(/\\((.*)\\)/);\n\t if (params && params.length > 1){\n\t var entries = params[1].split(',');\n\t for(var i = 0; i < entries.length; i++) {\n\t var entry = entries[i].split('=');\n\t if (entry.length == 2) {\n\t symbol.params[entry[0]] = entry[1];\n\t }\n\t }\n\t }\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':$') >= 0) {\n\t sub = symbol.text.split(':$');\n\t symbol.text = sub.shift();\n\t symbol.function = sub.join(':$');\n\t } else if (symbol.symbolType.indexOf(':$') >= 0) {\n\t sub = symbol.symbolType.split(':$');\n\t symbol.symbolType = sub.shift();\n\t symbol.function = sub.join(':$');\n\t } else if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t var ann = getAnnotation(line);\n\t if (ann) {\n\t line = line.replace('@' + ann, ''); \n\t }\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var iS = 0, lenS = flowSymbols.length; iS < lenS; iS++) {\n\t var flowSymb = flowSymbols[iS];\n\t var symbVal = getSymbValue(flowSymb);\n\t\n\t if (symbVal === 'true' || symbVal === 'false') {\n\t // map true or false to yes or no respectively\n\t flowSymb = flowSymb.replace('true', 'yes');\n\t flowSymb = flowSymb.replace('false', 'no');\n\t }\n\t \n\t var next = getNextPath(flowSymb);\n\t var realSymb = getSymbol(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (ann) {\n\t if (next == \"yes\" || next == \"true\")\n\t realSymb.yes_annotation = ann;\n\t else\n\t realSymb.no_annotation = ann;\n\t ann = null;\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (iS + 1 < lenS) {\n\t var nextSymb = flowSymbols[iS + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t } else if (line.indexOf('@>') >= 0) {\n\t\n\t // line style\n\t var lineStyleSymbols = line.split('@>');\n\t for (var iSS = 0, lenSS = lineStyleSymbols.length; iSS < lenSS; iSS++) {\n\t if ((iSS + 1) !== lenSS) {\n\t var curSymb = getSymbol(lineStyleSymbols[iSS]);\n\t var nextSymbol = getSymbol(lineStyleSymbols[iSS+1]);\n\t\n\t curSymb['lineStyle'][nextSymbol.key] = JSON.parse(getStyle(lineStyleSymbols[iSS + 1]));\n\t }\n\t }\n\t }\n\t\n\t }\n\t return chart;\n\t}\n\t\n\tmodule.exports = parse;\n\n\n/***/ }),\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction Condition(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.yes_annotation = options.yes_annotation;\n\t this.no_annotation = options.no_annotation;\n\t this.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = options.direction_yes;\n\t this.no_direction = options.direction_no;\n\t this.params = options.params;\n\t if (!this.no_direction && this.yes_direction === 'right') {\n\t this.no_direction = 'bottom';\n\t } else if (!this.yes_direction && this.no_direction === 'bottom') {\n\t this.yes_direction = 'right'\n\t }\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.right_symbol.symbolType === 'end') return;\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t \n\t if (this.left_symbol) {\n\t var leftPoint = this.getLeft();\n\t \n\t if (!this.left_symbol.isPositioned) {\n\t this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n\t this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t var self = this;\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t \n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t \n\t if (hasSymbolUnder) {\n\t if (self.left_symbol.symbolType === 'end') return;\n\t self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t \n\t this.left_symbol.isPositioned = true;\n\t \n\t this.left_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.yes_annotation ? this.yes_annotation : this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.no_annotation ? this.no_annotation : this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ }),\n/* 6 */\n/*!******************************************!*\\\n !*** ./src/flowchart.symbol.parallel.js ***!\n \\******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Parallel(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t this.params = options.params;\n\t if (options.direction_next === 'path1' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path2' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path3' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t\n\t if (options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path1 === 'right') {\n\t this.path2_direction = 'bottom';\n\t this.path1_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path1 === 'top') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'top';\n\t this.path3_direction = 'bottom';\n\t } else if (options.direction_path1 === 'left') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'left';\n\t this.path3_direction = 'bottom';\n\t } else {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'left';\n\t this.path3_direction = 'right';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'top';\n\t this.path3_direction = 'right';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'left';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else {\n\t this.path1_direction = options.direction_path1;\n\t this.path2_direction = options.direction_path2;\n\t this.path3_direction = options.direction_path3;\n\t }\n\t\n\t this.path1_direction = this.path1_direction || 'bottom';\n\t this.path2_direction = this.path2_direction || 'right';\n\t this.path3_direction = this.path3_direction || 'top';\n\t\n\t this.initialize();\n\t}\n\tinherits(Parallel, Symbol);\n\t\n\tParallel.prototype.render = function() {\n\t\n\t if (this.path1_direction) {\n\t this[this.path1_direction + '_symbol'] = this.path1_symbol;\n\t }\n\t\n\t if (this.path2_direction) {\n\t this[this.path2_direction + '_symbol'] = this.path2_symbol;\n\t }\n\t\n\t if (this.path3_direction) {\n\t this[this.path3_direction + '_symbol'] = this.path3_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.top_symbol) {\n\t var topPoint = this.getTop();\n\t\n\t if (!this.top_symbol.isPositioned) {\n\t this.top_symbol.shiftY(this.getY() - this.top_symbol.height - lineLength);\n\t this.top_symbol.setX(topPoint.x + this.top_symbol.width);\n\t this.top_symbol.isPositioned = true;\n\t\n\t this.top_symbol.render();\n\t }\n\t }\n\t\n\t var self = this;\n\t\n\t if (this.left_symbol) {\n\t var leftPoint = this.getLeft();\n\t\n\t if (!this.left_symbol.isPositioned) {\n\t this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n\t this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.left_symbol.symbolType === 'end') return;\n\t self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.left_symbol.isPositioned = true;\n\t\n\t this.left_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.right_symbol.symbolType === 'end') return;\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tParallel.prototype.renderLines = function() {\n\t if (this.path1_symbol) {\n\t this.drawLineTo(this.path1_symbol, '', this.path1_direction);\n\t }\n\t\n\t if (this.path2_symbol) {\n\t this.drawLineTo(this.path2_symbol, '', this.path2_direction);\n\t }\n\t\n\t if (this.path3_symbol) {\n\t this.drawLineTo(this.path3_symbol, '', this.path3_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Parallel;\n\n/***/ }),\n/* 7 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 16);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 8);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\tvar Parallel = __webpack_require__(/*! ./flowchart.symbol.parallel */ 6);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if (symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else if (symbol instanceof(Parallel)) {\n\t symbol.path1 = function(nextSymbol) {\n\t symbol.path1_symbol = nextSymbol;\n\t if (symbol.path2_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.path2 = function(nextSymbol) {\n\t symbol.path2_symbol = nextSymbol;\n\t if (symbol.path3_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.path3 = function(nextSymbol) {\n\t symbol.path3_symbol = nextSymbol;\n\t if (symbol.path1_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t minX = 0,\n\t minY = 0,\n\t symbol,\n\t line;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t var x;\n\t var y;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t var leftX = symbol.getX()\n\t x = leftX + symbol.width;\n\t y = symbol.getY() + symbol.height;\n\t if (leftX < minX) {\n\t minX = leftX;\n\t }\n\t if (x > maxX) {\n\t maxX = x;\n\t }\n\t if (y > maxY) {\n\t maxY = y;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.lines.length; i < len; i++) {\n\t line = this.lines[i].getBBox();\n\t x = line.x;\n\t y = line.y;\n\t var x2 = line.x2;\n\t var y2 = line.y2;\n\t if (x < minX) {\n\t minX = x;\n\t }\n\t if (y < minY) {\n\t minY = y;\n\t }\n\t if (x2 > maxX) {\n\t maxX = x2;\n\t }\n\t if (y2 > maxY) {\n\t maxY = y2;\n\t }\n\t }\n\t\n\t var scale = this.options['scale'];\n\t var lineWidth = this.options['line-width'];\n\t\n\t if (this.minXFromSymbols < minX) minX = this.minXFromSymbols;\n\t\n\t if (minX < 0) minX -= lineWidth;\n\t if (minY < 0) minY -= lineWidth;\n\t\n\t var width = maxX + lineWidth - minX;\n\t var height = maxY + lineWidth - minY;\n\t\n\t this.paper.setSize(width * scale, height * scale);\n\t this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode && paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n/***/ }),\n/* 8 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ (function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {},\n\t 'parallel': {}\n\t } //,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n/***/ }),\n/* 9 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ (function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ }),\n/* 10 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ }),\n/* 11 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ }),\n/* 12 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ }),\n/* 13 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ }),\n/* 14 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ }),\n/* 15 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\n\t\t(function( $ ) {\n\t\t\tfunction paramFit(needle, haystack) {\n\t\t\t\treturn needle == haystack ||\n\t\t\t\t( Array.isArray(haystack) && (haystack.includes(needle) || haystack.includes(Number(needle)) ))\n\t\t\t}\n\t\t\tvar methods = {\n\t\t\t\tinit : function(options) {\n\t\t\t\t\treturn this.each(function() {\n\t\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\t\tthis.chart = parse($this.text());\n\t\t\t\t\t\t$this.html('');\n\t\t\t\t\t\tthis.chart.drawSVG(this, options);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tsetFlowStateByParam : function(param, paramValue, newFlowState) {\n\t\t\t\t\treturn this.each(function() {\n\t\t\t\t\t\tvar chart = this.chart;\n\t\n\t\t\t\t\t\t// @todo this should be part of Symbol API\n\t\t\t\t\t\tvar nextSymbolKeys = ['next', 'yes', 'no', 'path1', 'path2', 'path3'];\n\t\n\t\t\t\t\t\tfor (var property in chart.symbols) {\n\t\t\t\t\t\t\tif (chart.symbols.hasOwnProperty(property)) {\n\t\t\t\t\t\t\t\tvar symbol = chart.symbols[property];\n\t\t\t\t\t\t\t\tvar val = symbol.params[param];\n\t\t\t\t\t\t\t\tif (paramFit(val, paramValue)) {\n\t\t\t\t\t\t\t\t\tsymbol.flowstate = newFlowState;\n\t\t\t\t\t\t\t\t\tfor (var nski = 0; nski < nextSymbolKeys.length; nski++) {\n\t\t\t\t\t\t\t\t\t\tvar nextSymbolKey = nextSymbolKeys[nski];\n\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey] &&\n\t\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey]['params'] &&\n\t\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey]['params'][param] &&\n\t\t\t\t\t\t\t\t\t\t\tparamFit(symbol[nextSymbolKey]['params'][param], paramValue)\n\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\tsymbol.lineStyle[symbol[nextSymbolKey]['key']] = {stroke: chart.options()['flowstate'][newFlowState]['fill']};\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tchart.clean();\n\t\t\t\t\t\tchart.drawSVG(this);\n\t\t\t\t\t});\n\t\n\t\t\t\t},\n\t\t\t\tclearFlowState: function () {\n\t\t\t\t\treturn this.each(function() {\n\t\t\t\t\t\tvar chart = this.chart;\n\t\n\t\t\t\t\t\tfor (var property in chart.symbols) {\n\t\t\t\t\t\t\tif (chart.symbols.hasOwnProperty(property)) {\n\t\t\t\t\t\t\t\tvar node = chart.symbols[property];\n\t\t\t\t\t\t\t\tnode.flowstate = '';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tchart.clean();\n\t\t\t\t\t\tchart.drawSVG(this);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t\t$.fn.flowChart = function(methodOrOptions) {\n\t\t\t\tif ( methods[methodOrOptions] ) {\n\t\t\t\t\treturn methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 ));\n\t\t\t\t} else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ) {\n\t\t\t\t\t// Default to \"init\"\n\t\t\t\t\treturn methods.init.apply( this, arguments );\n\t\t\t\t} else {\n\t\t\t\t\t$.error( 'Method ' + methodOrOptions + ' does not exist on jQuery.flowChart' );\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ }),\n/* 16 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ (function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// flowchart.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 023f7f29848dc01c3957","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./index.js\n// module id = 0\n// module chunks = 0","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.helpers.js\n// module id = 1\n// module chunks = 0","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n this.lineStyle = (options.lineStyle || {});\n this.key = (options.key || '');\n this.leftLines = [];\n this.rightLines = [];\n this.topLines = [];\n this.bottomLines = [];\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n \n //ndrqu Add click function with event and options params\n if (options.function) { \n this.text.attr({ 'cursor' : 'pointer' });\n\n this.text.node.addEventListener(\"click\", function(evt) {\n window[options.function](evt,options);\n }, false);\n }\n \n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n\n //ndrqu Add click function with event and options params\n if (options.function) { \n symbol.node.addEventListener(\"click\", function(evt) {\n window[options.function](evt,options);\n }, false);\n symbol.attr({ 'cursor' : 'pointer' });\n }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var self = this;\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n if (self.next.symbolType === 'end') return;\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else if (this.next_direction === 'left') {\n\n var leftPoint = this.getLeft();\n\n if (!this.next.isPositioned) {\n this.next.setY(leftPoint.y - this.next.height/2);\n this.next.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n if (self.next.symbolType === 'end') return;\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, this.getAttr('arrow-text') || '', this.next_direction);\n } else {\n this.drawLineTo(this.next, this.getAttr('arrow-text') || '');\n }\n }\n};\n\nSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n if (this.connectedTo.indexOf(symbol) < 0) {\n this.connectedTo.push(symbol);\n }\n\n var x = this.getCenter().x,\n y = this.getCenter().y,\n right = this.getRight(),\n bottom = this.getBottom(),\n top = this.getTop(),\n left = this.getLeft();\n\n var symbolX = symbol.getCenter().x,\n symbolY = symbol.getCenter().y,\n symbolTop = symbol.getTop(),\n symbolRight = symbol.getRight(),\n symbolLeft = symbol.getLeft();\n\n var isOnSameColumn = x === symbolX,\n isOnSameLine = y === symbolY,\n isUnder = y < symbolY,\n isUpper = y > symbolY || this === symbol,\n isLeft = x > symbolX,\n isRight = x < symbolX;\n\n var maxX = 0,\n line,\n yOffset,\n lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n if (symbol.topLines.length === 0 && this.bottomLines.length === 0) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n } else {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n line = drawLine(this.chart, bottom, [\n {x: symbolTop.x, y: symbolTop.y - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n if (symbol.leftLines.length === 0 && this.rightLines.length === 0) {\n line = drawLine(this.chart, right, symbolLeft, text);\n } else {\n yOffset = Math.max(symbol.leftLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x, y: right.y - yOffset},\n {x: right.x, y: symbolLeft.y - yOffset},\n {x: symbolLeft.x, y: symbolLeft.y - yOffset},\n {x: symbolLeft.x, y: symbolLeft.y}\n ], text);\n }\n this.rightLines.push(line);\n symbol.leftLines.push(line);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n if (symbol.rightLines.length === 0 && this.leftLines.length === 0) {\n line = drawLine(this.chart, left, symbolRight, text);\n } else {\n yOffset = Math.max(symbol.rightLines.length, this.leftLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x, y: right.y - yOffset},\n {x: right.x, y: symbolRight.y - yOffset},\n {x: symbolRight.x, y: symbolRight.y - yOffset},\n {x: symbolRight.x, y: symbolRight.y}\n ], text);\n }\n this.leftLines.push(line);\n symbol.rightLines.push(line);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y - yOffset},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightLines.push(line);\n symbol.topLines.push(line);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y - yOffset},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightLines.push(line);\n symbol.topLines.push(line);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2 - yOffset},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n } else {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((!origin || origin === 'bottom') && isRight && isUnder) {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n if (symbolTop.x > maxX) maxX = symbolTop.x;\n } else if ((!origin || origin === 'bottom') && isRight) {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2 - yOffset},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((origin && origin === 'right') && isLeft) {\n yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightLines.push(line);\n symbol.topLines.push(line);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y - yOffset},\n {x: symbolTop.x, y: symbolTop.y - yOffset}\n ], text);\n this.rightLines.push(line);\n symbol.topLines.push(line);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2 - yOffset},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + lineLength/2;\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n var diffX = left.x - lineLength/2;\n if (symbolLeft.x < left.x) {\n diffX = symbolLeft.x - lineLength/2;\n }\n yOffset = Math.max(symbol.topLines.length, this.leftLines.length) * 10;\n line = drawLine(this.chart, left, [\n {x: diffX, y: left.y - yOffset},\n {x: diffX, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftLines.push(line);\n symbol.topLines.push(line);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\n yOffset = Math.max(symbol.topLines.length, this.leftLines.length) * 10;\n line = drawLine(this.chart, left, [\n {x: symbolTop.x + (left.x - symbolTop.x)/2, y: left.y},\n {x: symbolTop.x + (left.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftLines.push(line);\n symbol.topLines.push(line);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'top')) {\n yOffset = Math.max(symbol.topLines.length, this.topLines.length) * 10;\n line = drawLine(this.chart, top, [\n {x: top.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.topLines.push(line);\n symbol.topLines.push(line);\n this.topStart = true;\n symbol.topEnd = true;\n maxX = top.x;\n }\n\n //update line style\n if (this.lineStyle[symbol.key] && line){\n line.attr(this.lineStyle[symbol.key]);\n }\n\n if (line) {\n for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n var otherLine = this.chart.lines[l];\n\n var ePath = otherLine.attr('path'),\n lPath = line.attr('path');\n\n for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n var newPath = [];\n newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\n var line1_from_x = newPath[0][1];\n var line1_from_y = newPath[0][2];\n var line1_to_x = newPath[1][1];\n var line1_to_y = newPath[1][2];\n\n for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n var newLinePath = [];\n newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\n var line2_from_x = newLinePath[0][1];\n var line2_from_y = newLinePath[0][2];\n var line2_to_x = newLinePath[1][1];\n var line2_to_y = newLinePath[1][2];\n\n var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n if (res.onLine1 && res.onLine2) {\n\n var newSegment;\n if (line2_from_y === line2_to_y) {\n if (line2_from_x > line2_to_x) {\n newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n } else {\n if (line2_from_y > line2_to_y) {\n newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n }\n\n lP += 2;\n }\n }\n }\n }\n\n this.chart.lines.push(line);\n if (this.chart.minXFromSymbols === undefined || this.chart.minXFromSymbols > left.x) {\n this.chart.minXFromSymbols = left.x;\n }\n }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.js\n// module id = 2\n// module chunks = 0","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n var textAnchor = 'start';\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n if (from.x > firstTo.x) {\n x -= chart.options['text-margin']/2;\n textAnchor = 'end';\n } else {\n x += chart.options['text-margin']/2;\n }\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n if (from.y > firstTo.y) {\n y -= chart.options['text-margin']*2;\n }\n }\n }\n\n textPath.attr({\n 'text-anchor': textAnchor,\n 'font-size': chart.options['font-size'],\n 'fill': chart.options['font-color'],\n x: x,\n y: y\n });\n\n if (font) textPath.attr({ 'font': font });\n if (fontF) textPath.attr({ 'font-family': fontF });\n if (fontW) textPath.attr({ 'font-weight': fontW });\n }\n\n return line;\n}\n\nfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n var denominator, a, b, numerator1, numerator2, result = {\n x: null,\n y: null,\n onLine1: false,\n onLine2: false\n };\n denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n if (denominator === 0) {\n return result;\n }\n a = line1StartY - line2StartY;\n b = line1StartX - line2StartX;\n numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n a = numerator1 / denominator;\n b = numerator2 / denominator;\n\n // if we cast these lines infinitely in both directions, they intersect here:\n result.x = line1StartX + (a * (line1EndX - line1StartX));\n result.y = line1StartY + (a * (line1EndY - line1StartY));\n /*\n // it is worth noting that this should be the same as:\n x = line2StartX + (b * (line2EndX - line2StartX));\n y = line2StartX + (b * (line2EndY - line2StartY));\n */\n // if line1 is a segment and line2 is infinite, they intersect if:\n if (a > 0 && a < 1) {\n result.onLine1 = true;\n }\n // if line2 is a segment and line1 is infinite, they intersect if:\n if (b > 0 && b < 1) {\n result.onLine2 = true;\n }\n // if line1 and line2 are segments, they intersect if both of the above are true\n return result;\n}\n\nmodule.exports = {\n\tdrawPath: drawPath,\n\tdrawLine: drawLine,\n\tcheckLineIntersection: checkLineIntersection\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.functions.js\n// module id = 3\n// module chunks = 0","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\nvar Parallel = require('./flowchart.symbol.parallel');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s);\n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n case 'parallel':\n dispSymbols[s.key] = new Parallel(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else if (prevDisp instanceof(Parallel)) {\n if (prev.path1 === s) {\n prevDisp.path1(dispSymb);\n }\n if (prev.path2 === s) {\n prevDisp.path2(dispSymb);\n }\n if (prev.path3 === s) {\n prevDisp.path3(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (dispSymb instanceof(Parallel)) {\n if (s.path1) {\n constructChart(s.path1, dispSymb, s);\n }\n if (s.path2) {\n constructChart(s.path2, dispSymb, s);\n }\n if (s.path3) {\n constructChart(s.path3, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n },\n options: function() {\n return this.diagram.options;\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if (prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getStyle(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '{}';\n }\n\n function getSymbValue(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '';\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)];\n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n \n function getAnnotation(s) {\n\tvar startIndex = s.indexOf(\"(\") + 1, endIndex = s.indexOf(\")\");\n\tvar tmp = s.substring(startIndex, endIndex);\n\tif(tmp.indexOf(\",\") > 0) { tmp = tmp.substring(0, tmp.indexOf(\",\")); }\n\tvar tmp_split = tmp.split(\"@\");\n\tif(tmp_split.length > 1)\n\t\treturn startIndex >= 0 && endIndex >= 0 ? tmp_split[1] : \"\";\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0].trim();\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0].replace(/\\(.*\\)/, ''),\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null,\n function: null,\n lineStyle: {},\n params: {}\n };\n\n //parse parameters\n var params = parts[0].match(/\\((.*)\\)/);\n if (params && params.length > 1){\n var entries = params[1].split(',');\n for(var i = 0; i < entries.length; i++) {\n var entry = entries[i].split('=');\n if (entry.length == 2) {\n symbol.params[entry[0]] = entry[1];\n }\n }\n }\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':$') >= 0) {\n sub = symbol.text.split(':$');\n symbol.text = sub.shift();\n symbol.function = sub.join(':$');\n } else if (symbol.symbolType.indexOf(':$') >= 0) {\n sub = symbol.symbolType.split(':$');\n symbol.symbolType = sub.shift();\n symbol.function = sub.join(':$');\n } else if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n var ann = getAnnotation(line);\n if (ann) {\n line = line.replace('@' + ann, ''); \n }\n // flow\n var flowSymbols = line.split('->');\n for (var iS = 0, lenS = flowSymbols.length; iS < lenS; iS++) {\n var flowSymb = flowSymbols[iS];\n var symbVal = getSymbValue(flowSymb);\n\n if (symbVal === 'true' || symbVal === 'false') {\n // map true or false to yes or no respectively\n flowSymb = flowSymb.replace('true', 'yes');\n flowSymb = flowSymb.replace('false', 'no');\n }\n \n var next = getNextPath(flowSymb);\n var realSymb = getSymbol(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (ann) {\n if (next == \"yes\" || next == \"true\")\n realSymb.yes_annotation = ann;\n else\n realSymb.no_annotation = ann;\n ann = null;\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (iS + 1 < lenS) {\n var nextSymb = flowSymbols[iS + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n } else if (line.indexOf('@>') >= 0) {\n\n // line style\n var lineStyleSymbols = line.split('@>');\n for (var iSS = 0, lenSS = lineStyleSymbols.length; iSS < lenSS; iSS++) {\n if ((iSS + 1) !== lenSS) {\n var curSymb = getSymbol(lineStyleSymbols[iSS]);\n var nextSymbol = getSymbol(lineStyleSymbols[iSS+1]);\n\n curSymb['lineStyle'][nextSymbol.key] = JSON.parse(getStyle(lineStyleSymbols[iSS + 1]));\n }\n }\n }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.parse.js\n// module id = 4\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.yes_annotation = options.yes_annotation;\n this.no_annotation = options.no_annotation;\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = options.direction_yes;\n this.no_direction = options.direction_no;\n this.params = options.params;\n if (!this.no_direction && this.yes_direction === 'right') {\n this.no_direction = 'bottom';\n } else if (!this.yes_direction && this.no_direction === 'bottom') {\n this.yes_direction = 'right'\n }\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n if (self.right_symbol.symbolType === 'end') return;\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n \n if (this.left_symbol) {\n var leftPoint = this.getLeft();\n \n if (!this.left_symbol.isPositioned) {\n this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n var self = this;\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n \n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n \n if (hasSymbolUnder) {\n if (self.left_symbol.symbolType === 'end') return;\n self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n \n this.left_symbol.isPositioned = true;\n \n this.left_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.yes_annotation ? this.yes_annotation : this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.no_annotation ? this.no_annotation : this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.condition.js\n// module id = 5\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Parallel(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n this.textMargin = this.getAttr('text-margin');\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'top';\n this.params = options.params;\n if (options.direction_next === 'path1' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n if (options.direction_next === 'path2' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n if (options.direction_next === 'path3' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n\n if (options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3) {\n if (options.direction_path1 === 'right') {\n this.path2_direction = 'bottom';\n this.path1_direction = 'right';\n this.path3_direction = 'top';\n } else if (options.direction_path1 === 'top') {\n this.path2_direction = 'right';\n this.path1_direction = 'top';\n this.path3_direction = 'bottom';\n } else if (options.direction_path1 === 'left') {\n this.path2_direction = 'right';\n this.path1_direction = 'left';\n this.path3_direction = 'bottom';\n } else {\n this.path2_direction = 'right';\n this.path1_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else if (options.path1 && !options.direction_path1 && options.path2 && options.direction_path2 && options.path3 && !options.direction_path3) {\n if (options.direction_path2 === 'right') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'top';\n } else if (options.direction_path2 === 'left') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'left';\n this.path3_direction = 'right';\n } else {\n this.path1_direction = 'right';\n this.path2_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else if (options.path1 && !options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && options.direction_path3) {\n if (options.direction_path2 === 'right') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'top';\n this.path3_direction = 'right';\n } else if (options.direction_path2 === 'left') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'left';\n } else {\n this.path1_direction = 'right';\n this.path2_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else {\n this.path1_direction = options.direction_path1;\n this.path2_direction = options.direction_path2;\n this.path3_direction = options.direction_path3;\n }\n\n this.path1_direction = this.path1_direction || 'bottom';\n this.path2_direction = this.path2_direction || 'right';\n this.path3_direction = this.path3_direction || 'top';\n\n this.initialize();\n}\ninherits(Parallel, Symbol);\n\nParallel.prototype.render = function() {\n\n if (this.path1_direction) {\n this[this.path1_direction + '_symbol'] = this.path1_symbol;\n }\n\n if (this.path2_direction) {\n this[this.path2_direction + '_symbol'] = this.path2_symbol;\n }\n\n if (this.path3_direction) {\n this[this.path3_direction + '_symbol'] = this.path3_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.top_symbol) {\n var topPoint = this.getTop();\n\n if (!this.top_symbol.isPositioned) {\n this.top_symbol.shiftY(this.getY() - this.top_symbol.height - lineLength);\n this.top_symbol.setX(topPoint.x + this.top_symbol.width);\n this.top_symbol.isPositioned = true;\n\n this.top_symbol.render();\n }\n }\n\n var self = this;\n\n if (this.left_symbol) {\n var leftPoint = this.getLeft();\n\n if (!this.left_symbol.isPositioned) {\n this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n if (self.left_symbol.symbolType === 'end') return;\n self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.left_symbol.isPositioned = true;\n\n this.left_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n if (self.right_symbol.symbolType === 'end') return;\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nParallel.prototype.renderLines = function() {\n if (this.path1_symbol) {\n this.drawLineTo(this.path1_symbol, '', this.path1_direction);\n }\n\n if (this.path2_symbol) {\n this.drawLineTo(this.path2_symbol, '', this.path2_direction);\n }\n\n if (this.path3_symbol) {\n this.drawLineTo(this.path3_symbol, '', this.path3_direction);\n }\n};\n\nmodule.exports = Parallel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.parallel.js\n// module id = 6\n// module chunks = 0","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\nvar Parallel = require('./flowchart.symbol.parallel');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if (symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else if (symbol instanceof(Parallel)) {\n symbol.path1 = function(nextSymbol) {\n symbol.path1_symbol = nextSymbol;\n if (symbol.path2_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.path2 = function(nextSymbol) {\n symbol.path2_symbol = nextSymbol;\n if (symbol.path3_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.path3 = function(nextSymbol) {\n symbol.path3_symbol = nextSymbol;\n if (symbol.path1_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n minX = 0,\n minY = 0,\n symbol,\n line;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n var x;\n var y;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n var leftX = symbol.getX()\n x = leftX + symbol.width;\n y = symbol.getY() + symbol.height;\n if (leftX < minX) {\n minX = leftX;\n }\n if (x > maxX) {\n maxX = x;\n }\n if (y > maxY) {\n maxY = y;\n }\n }\n\n for (i = 0, len = this.lines.length; i < len; i++) {\n line = this.lines[i].getBBox();\n x = line.x;\n y = line.y;\n var x2 = line.x2;\n var y2 = line.y2;\n if (x < minX) {\n minX = x;\n }\n if (y < minY) {\n minY = y;\n }\n if (x2 > maxX) {\n maxX = x2;\n }\n if (y2 > maxY) {\n maxY = y2;\n }\n }\n\n var scale = this.options['scale'];\n var lineWidth = this.options['line-width'];\n\n if (this.minXFromSymbols < minX) minX = this.minXFromSymbols;\n\n if (minX < 0) minX -= lineWidth;\n if (minY < 0) minY -= lineWidth;\n\n var width = maxX + lineWidth - minX;\n var height = maxY + lineWidth - minY;\n\n this.paper.setSize(width * scale, height * scale);\n this.paper.setViewBox(minX, minY, width, height, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode && paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.chart.js\n// module id = 7\n// module chunks = 0","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {},\n 'parallel': {}\n } //,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.defaults.js\n// module id = 8\n// module chunks = 0","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.shim.js\n// module id = 9\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.end.js\n// module id = 10\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.inputoutput.js\n// module id = 11\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.operation.js\n// module id = 12\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.start.js\n// module id = 13\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.subroutine.js\n// module id = 14\n// module chunks = 0","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\n\t(function( $ ) {\n\t\tfunction paramFit(needle, haystack) {\n\t\t\treturn needle == haystack ||\n\t\t\t( Array.isArray(haystack) && (haystack.includes(needle) || haystack.includes(Number(needle)) ))\n\t\t}\n\t\tvar methods = {\n\t\t\tinit : function(options) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tthis.chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tthis.chart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t},\n\t\t\tsetFlowStateByParam : function(param, paramValue, newFlowState) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar chart = this.chart;\n\n\t\t\t\t\t// @todo this should be part of Symbol API\n\t\t\t\t\tvar nextSymbolKeys = ['next', 'yes', 'no', 'path1', 'path2', 'path3'];\n\n\t\t\t\t\tfor (var property in chart.symbols) {\n\t\t\t\t\t\tif (chart.symbols.hasOwnProperty(property)) {\n\t\t\t\t\t\t\tvar symbol = chart.symbols[property];\n\t\t\t\t\t\t\tvar val = symbol.params[param];\n\t\t\t\t\t\t\tif (paramFit(val, paramValue)) {\n\t\t\t\t\t\t\t\tsymbol.flowstate = newFlowState;\n\t\t\t\t\t\t\t\tfor (var nski = 0; nski < nextSymbolKeys.length; nski++) {\n\t\t\t\t\t\t\t\t\tvar nextSymbolKey = nextSymbolKeys[nski];\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey] &&\n\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey]['params'] &&\n\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey]['params'][param] &&\n\t\t\t\t\t\t\t\t\t\tparamFit(symbol[nextSymbolKey]['params'][param], paramValue)\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tsymbol.lineStyle[symbol[nextSymbolKey]['key']] = {stroke: chart.options()['flowstate'][newFlowState]['fill']};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tchart.clean();\n\t\t\t\t\tchart.drawSVG(this);\n\t\t\t\t});\n\n\t\t\t},\n\t\t\tclearFlowState: function () {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar chart = this.chart;\n\n\t\t\t\t\tfor (var property in chart.symbols) {\n\t\t\t\t\t\tif (chart.symbols.hasOwnProperty(property)) {\n\t\t\t\t\t\t\tvar node = chart.symbols[property];\n\t\t\t\t\t\t\tnode.flowstate = '';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tchart.clean();\n\t\t\t\t\tchart.drawSVG(this);\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\t$.fn.flowChart = function(methodOrOptions) {\n\t\t\tif ( methods[methodOrOptions] ) {\n\t\t\t\treturn methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 ));\n\t\t\t} else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ) {\n\t\t\t\t// Default to \"init\"\n\t\t\t\treturn methods.init.apply( this, arguments );\n\t\t\t} else {\n\t\t\t\t$.error( 'Method ' + methodOrOptions + ' does not exist on jQuery.flowChart' );\n\t\t\t}\n\t\t};\n\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/jquery-plugin.js\n// module id = 15\n// module chunks = 0","module.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"Raphael\"\n// module id = 16\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.min.js","webpack:///webpack/bootstrap 7856b1d7e6e22eb4c6fd","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.symbol.parallel.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_16__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","lineStyle","key","leftLines","rightLines","topLines","bottomLines","params","next_direction","next","undefined","text","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","function","cursor","addEventListener","evt","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","self","lineLength","rightPoint","isPositioned","shift","symb","hasSymbolUnder","len","diff","Math","abs","leftPoint","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","yOffset","right","bottom","top","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","max","rightStart","topEnd","bottomStart","diffX","leftStart","topStart","leftEnd","rightEnd","l","llen","lines","otherLine","ePath","lPath","iP","lenP","newPath","line1_from_x","line1_from_y","line1_to_x","line1_to_y","lP","lenlP","newLinePath","line2_from_x","line2_from_y","line2_to_x","line2_to_y","res","onLine1","onLine2","newSegment","splice","minXFromSymbols","maxXFromLine","drawPath","location","points","path","pathValues","from","to","toString","arrow-end","centerText","textPath","textAnchor","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getStyle","s","startIndex","endIndex","getSymbValue","getSymbol","getNextPath","flowSymb","getAnnotation","tmp","tmp_split","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Parallel","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","path1","path2","path3","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","parts","match","entries","entry","sub","join","txtAndState","pop","ann","flowSymbols","iS","lenS","symbVal","realSymb","direction","condOpt","yes_annotation","no_annotation","path1_annotation","path2_annotation","path3_annotation","nextSymb","lineStyleSymbols","iSS","lenSS","curSymb","nextSymbol","JSON","textMargin","yes_direction","direction_yes","no_direction","direction_no","startX","startY","yes_symbol","no_symbol","bottom_symbol","right_symbol","left_symbol","rect","path1_direction","path2_direction","path3_direction","direction_next","direction_path1","direction_path2","direction_path3","path1_symbol","path2_symbol","path3_symbol","top_symbol","topPoint","Raphael","handle","flowChart","maxHeight","maxY","minX","minY","leftX","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","parallel","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","innerWrap","jQuery","$","paramFit","needle","haystack","isArray","includes","methods","init","each","$this","html","setFlowStateByParam","param","paramValue","newFlowState","nextSymbolKeys","property","hasOwnProperty","val","nski","nextSymbolKey","clearFlowState","fn","methodOrOptions","apply","slice","error"],"mappings":"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","file":"flowchart.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_16__) {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_16__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 9);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 15);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ }),\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ (function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ }),\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t this.lineStyle = (options.lineStyle || {});\n\t this.key = (options.key || '');\n\t this.leftLines = [];\n\t this.rightLines = [];\n\t this.topLines = [];\n\t this.bottomLines = [];\n\t this.params = options.params;\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t \n\t //ndrqu Add click function with event and options params\n\t if (options.function) { \n\t this.text.attr({ 'cursor' : 'pointer' });\n\t\n\t this.text.node.addEventListener(\"click\", function(evt) {\n\t window[options.function](evt,options);\n\t }, false);\n\t }\n\t\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t\n\t //ndrqu Add click function with event and options params\n\t if (options.function) { \n\t symbol.node.addEventListener(\"click\", function(evt) {\n\t window[options.function](evt,options);\n\t }, false);\n\t symbol.attr({ 'cursor' : 'pointer' });\n\t }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var self = this;\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.next.symbolType === 'end') return;\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else if (this.next_direction === 'left') {\n\t\n\t var leftPoint = this.getLeft();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.setY(leftPoint.y - this.next.height/2);\n\t this.next.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.next.symbolType === 'end') return;\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, this.getAttr('arrow-text') || '', this.next_direction);\n\t } else {\n\t this.drawLineTo(this.next, this.getAttr('arrow-text') || '');\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n\t if (this.connectedTo.indexOf(symbol) < 0) {\n\t this.connectedTo.push(symbol);\n\t }\n\t\n\t var x = this.getCenter().x,\n\t y = this.getCenter().y,\n\t right = this.getRight(),\n\t bottom = this.getBottom(),\n\t top = this.getTop(),\n\t left = this.getLeft();\n\t\n\t var symbolX = symbol.getCenter().x,\n\t symbolY = symbol.getCenter().y,\n\t symbolTop = symbol.getTop(),\n\t symbolRight = symbol.getRight(),\n\t symbolLeft = symbol.getLeft();\n\t\n\t var isOnSameColumn = x === symbolX,\n\t isOnSameLine = y === symbolY,\n\t isUnder = y < symbolY,\n\t isUpper = y > symbolY || this === symbol,\n\t isLeft = x > symbolX,\n\t isRight = x < symbolX;\n\t\n\t var maxX = 0,\n\t line,\n\t yOffset,\n\t lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t if (symbol.topLines.length === 0 && this.bottomLines.length === 0) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\n\t } else {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t line = drawLine(this.chart, bottom, [\n\t {x: symbolTop.x, y: symbolTop.y - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n\t if (symbol.leftLines.length === 0 && this.rightLines.length === 0) {\n\t line = drawLine(this.chart, right, symbolLeft, text);\n\t } else {\n\t yOffset = Math.max(symbol.leftLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x, y: right.y - yOffset},\n\t {x: right.x, y: symbolLeft.y - yOffset},\n\t {x: symbolLeft.x, y: symbolLeft.y - yOffset},\n\t {x: symbolLeft.x, y: symbolLeft.y}\n\t ], text);\n\t }\n\t this.rightLines.push(line);\n\t symbol.leftLines.push(line);\n\t this.rightStart = true;\n\t symbol.leftEnd = true;\n\t maxX = symbolLeft.x;\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n\t if (symbol.rightLines.length === 0 && this.leftLines.length === 0) {\n\t line = drawLine(this.chart, left, symbolRight, text);\n\t } else {\n\t yOffset = Math.max(symbol.rightLines.length, this.leftLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x, y: right.y - yOffset},\n\t {x: right.x, y: symbolRight.y - yOffset},\n\t {x: symbolRight.x, y: symbolRight.y - yOffset},\n\t {x: symbolRight.x, y: symbolRight.y}\n\t ], text);\n\t }\n\t this.leftLines.push(line);\n\t symbol.rightLines.push(line);\n\t this.leftStart = true;\n\t symbol.rightEnd = true;\n\t maxX = symbolRight.x;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n\t yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y - yOffset},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightLines.push(line);\n\t symbol.topLines.push(line);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n\t yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y - yOffset},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightLines.push(line);\n\t symbol.topLines.push(line);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2 - yOffset},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t } else {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((!origin || origin === 'bottom') && isRight && isUnder) {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t if (symbolTop.x > maxX) maxX = symbolTop.x;\n\t } else if ((!origin || origin === 'bottom') && isRight) {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2 - yOffset},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((origin && origin === 'right') && isLeft) {\n\t yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightLines.push(line);\n\t symbol.topLines.push(line);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'right') && isRight) {\n\t yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - yOffset}\n\t ], text);\n\t this.rightLines.push(line);\n\t symbol.topLines.push(line);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2 - yOffset},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + lineLength/2;\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n\t var diffX = left.x - lineLength/2;\n\t if (symbolLeft.x < left.x) {\n\t diffX = symbolLeft.x - lineLength/2;\n\t }\n\t yOffset = Math.max(symbol.topLines.length, this.leftLines.length) * 10;\n\t line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y - yOffset},\n\t {x: diffX, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftLines.push(line);\n\t symbol.topLines.push(line);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\n\t yOffset = Math.max(symbol.topLines.length, this.leftLines.length) * 10;\n\t line = drawLine(this.chart, left, [\n\t {x: symbolTop.x + (left.x - symbolTop.x)/2, y: left.y},\n\t {x: symbolTop.x + (left.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftLines.push(line);\n\t symbol.topLines.push(line);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'top')) {\n\t yOffset = Math.max(symbol.topLines.length, this.topLines.length) * 10;\n\t line = drawLine(this.chart, top, [\n\t {x: top.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.topLines.push(line);\n\t symbol.topLines.push(line);\n\t this.topStart = true;\n\t symbol.topEnd = true;\n\t maxX = top.x;\n\t }\n\t\n\t //update line style\n\t if (this.lineStyle[symbol.key] && line){\n\t line.attr(this.lineStyle[symbol.key]);\n\t }\n\t\n\t if (line) {\n\t for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n\t var otherLine = this.chart.lines[l];\n\t\n\t var ePath = otherLine.attr('path'),\n\t lPath = line.attr('path');\n\t\n\t for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n\t var newPath = [];\n\t newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n\t newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\t\n\t var line1_from_x = newPath[0][1];\n\t var line1_from_y = newPath[0][2];\n\t var line1_to_x = newPath[1][1];\n\t var line1_to_y = newPath[1][2];\n\t\n\t for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n\t var newLinePath = [];\n\t newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n\t newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\t\n\t var line2_from_x = newLinePath[0][1];\n\t var line2_from_y = newLinePath[0][2];\n\t var line2_to_x = newLinePath[1][1];\n\t var line2_to_y = newLinePath[1][2];\n\t\n\t var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n\t if (res.onLine1 && res.onLine2) {\n\t\n\t var newSegment;\n\t if (line2_from_y === line2_to_y) {\n\t if (line2_from_x > line2_to_x) {\n\t newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t } else {\n\t if (line2_from_y > line2_to_y) {\n\t newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t }\n\t\n\t lP += 2;\n\t }\n\t }\n\t }\n\t }\n\t\n\t this.chart.lines.push(line);\n\t if (this.chart.minXFromSymbols === undefined || this.chart.minXFromSymbols > left.x) {\n\t this.chart.minXFromSymbols = left.x;\n\t }\n\t }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ }),\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ (function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t var textAnchor = 'start';\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t if (from.x > firstTo.x) {\n\t x -= chart.options['text-margin']/2;\n\t textAnchor = 'end';\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t }\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t if (from.y > firstTo.y) {\n\t y -= chart.options['text-margin']*2;\n\t }\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': textAnchor,\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ }),\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 7);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 13);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 10);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 12);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 11);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 14);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\tvar Parallel = __webpack_require__(/*! ./flowchart.symbol.parallel */ 6);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s);\n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t case 'parallel':\n\t dispSymbols[s.key] = new Parallel(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else if (prevDisp instanceof(Parallel)) {\n\t if (prev.path1 === s) {\n\t prevDisp.path1(dispSymb);\n\t }\n\t if (prev.path2 === s) {\n\t prevDisp.path2(dispSymb);\n\t }\n\t if (prev.path3 === s) {\n\t prevDisp.path3(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (dispSymb instanceof(Parallel)) {\n\t if (s.path1) {\n\t constructChart(s.path1, dispSymb, s);\n\t }\n\t if (s.path2) {\n\t constructChart(s.path2, dispSymb, s);\n\t }\n\t if (s.path3) {\n\t constructChart(s.path3, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t },\n\t options: function() {\n\t return this.diagram.options;\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if (prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getStyle(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '{}';\n\t }\n\t\n\t function getSymbValue(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '';\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)];\n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t \n\t function getAnnotation(s) {\n\t\tvar startIndex = s.indexOf(\"(\") + 1, endIndex = s.indexOf(\")\");\n\t\tvar tmp = s.substring(startIndex, endIndex);\n\t\tif(tmp.indexOf(\",\") > 0) { tmp = tmp.substring(0, tmp.indexOf(\",\")); }\n\t\tvar tmp_split = tmp.split(\"@\");\n\t\tif(tmp_split.length > 1)\n\t\t\treturn startIndex >= 0 && endIndex >= 0 ? tmp_split[1] : \"\";\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0].trim();\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0].replace(/\\(.*\\)/, ''),\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null,\n\t function: null,\n\t lineStyle: {},\n\t params: {}\n\t };\n\t\n\t //parse parameters\n\t var params = parts[0].match(/\\((.*)\\)/);\n\t if (params && params.length > 1){\n\t var entries = params[1].split(',');\n\t for(var i = 0; i < entries.length; i++) {\n\t var entry = entries[i].split('=');\n\t if (entry.length == 2) {\n\t symbol.params[entry[0]] = entry[1];\n\t }\n\t }\n\t }\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':$') >= 0) {\n\t sub = symbol.text.split(':$');\n\t symbol.text = sub.shift();\n\t symbol.function = sub.join(':$');\n\t } else if (symbol.symbolType.indexOf(':$') >= 0) {\n\t sub = symbol.symbolType.split(':$');\n\t symbol.symbolType = sub.shift();\n\t symbol.function = sub.join(':$');\n\t } else if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t var ann = getAnnotation(line);\n\t if (ann) {\n\t line = line.replace('@' + ann, ''); \n\t }\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var iS = 0, lenS = flowSymbols.length; iS < lenS; iS++) {\n\t var flowSymb = flowSymbols[iS];\n\t var symbVal = getSymbValue(flowSymb);\n\t\n\t if (symbVal === 'true' || symbVal === 'false') {\n\t // map true or false to yes or no respectively\n\t flowSymb = flowSymb.replace('true', 'yes');\n\t flowSymb = flowSymb.replace('false', 'no');\n\t }\n\t \n\t var next = getNextPath(flowSymb);\n\t var realSymb = getSymbol(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (ann) {\n\t if (realSymb.symbolType === 'condition') {\n\t if (next === \"yes\" || next === \"true\") {\n\t realSymb.yes_annotation = ann;\n\t } else {\n\t realSymb.no_annotation = ann;\n\t }\n\t } else if (realSymb.symbolType === 'parallel') {\n\t if (next === 'path1') {\n\t realSymb.path1_annotation = ann;\n\t } else if (next === 'path2') {\n\t realSymb.path2_annotation = ann;\n\t } else if (next === 'path3') {\n\t realSymb.path3_annotation = ann;\n\t }\n\t }\n\t ann = null;\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (iS + 1 < lenS) {\n\t var nextSymb = flowSymbols[iS + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t } else if (line.indexOf('@>') >= 0) {\n\t\n\t // line style\n\t var lineStyleSymbols = line.split('@>');\n\t for (var iSS = 0, lenSS = lineStyleSymbols.length; iSS < lenSS; iSS++) {\n\t if ((iSS + 1) !== lenSS) {\n\t var curSymb = getSymbol(lineStyleSymbols[iSS]);\n\t var nextSymbol = getSymbol(lineStyleSymbols[iSS+1]);\n\t\n\t curSymb['lineStyle'][nextSymbol.key] = JSON.parse(getStyle(lineStyleSymbols[iSS + 1]));\n\t }\n\t }\n\t }\n\t\n\t }\n\t return chart;\n\t}\n\t\n\tmodule.exports = parse;\n\n\n/***/ }),\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction Condition(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.yes_annotation = options.yes_annotation;\n\t this.no_annotation = options.no_annotation;\n\t this.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = options.direction_yes;\n\t this.no_direction = options.direction_no;\n\t if (!this.no_direction && this.yes_direction === 'right') {\n\t this.no_direction = 'bottom';\n\t } else if (!this.yes_direction && this.no_direction === 'bottom') {\n\t this.yes_direction = 'right'\n\t }\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t this.symbol = symbol\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t var self = this;\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.right_symbol.symbolType === 'end') return;\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t \n\t if (this.left_symbol) {\n\t var leftPoint = this.getLeft();\n\t \n\t if (!this.left_symbol.isPositioned) {\n\t this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n\t this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t \n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t \n\t if (hasSymbolUnder) {\n\t if (self.left_symbol.symbolType === 'end') return;\n\t self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t \n\t this.left_symbol.isPositioned = true;\n\t \n\t this.left_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.yes_annotation ? this.yes_annotation : this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.no_annotation ? this.no_annotation : this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ }),\n/* 6 */\n/*!******************************************!*\\\n !*** ./src/flowchart.symbol.parallel.js ***!\n \\******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Parallel(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t this.path1_annotation = options.path1_annotation || '';\n\t this.path2_annotation = options.path2_annotation || '';\n\t this.path3_annotation = options.path3_annotation || '';\n\t this.textMargin = this.getAttr('text-margin');\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t this.params = options.params;\n\t if (options.direction_next === 'path1' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path2' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path3' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t\n\t if (options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path1 === 'right') {\n\t this.path2_direction = 'bottom';\n\t this.path1_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path1 === 'top') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'top';\n\t this.path3_direction = 'bottom';\n\t } else if (options.direction_path1 === 'left') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'left';\n\t this.path3_direction = 'bottom';\n\t } else {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'left';\n\t this.path3_direction = 'right';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'top';\n\t this.path3_direction = 'right';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'left';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else {\n\t this.path1_direction = options.direction_path1;\n\t this.path2_direction = options.direction_path2;\n\t this.path3_direction = options.direction_path3;\n\t }\n\t\n\t this.path1_direction = this.path1_direction || 'bottom';\n\t this.path2_direction = this.path2_direction || 'right';\n\t this.path3_direction = this.path3_direction || 'top';\n\t\n\t this.initialize();\n\t}\n\tinherits(Parallel, Symbol);\n\t\n\tParallel.prototype.render = function() {\n\t if (this.path1_direction) {\n\t this[this.path1_direction + '_symbol'] = this.path1_symbol;\n\t }\n\t\n\t if (this.path2_direction) {\n\t this[this.path2_direction + '_symbol'] = this.path2_symbol;\n\t }\n\t\n\t if (this.path3_direction) {\n\t this[this.path3_direction + '_symbol'] = this.path3_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.top_symbol) {\n\t var topPoint = this.getTop();\n\t\n\t if (!this.top_symbol.isPositioned) {\n\t this.top_symbol.shiftY(this.getY() - this.top_symbol.height - lineLength);\n\t this.top_symbol.setX(topPoint.x + this.top_symbol.width);\n\t this.top_symbol.isPositioned = true;\n\t\n\t this.top_symbol.render();\n\t }\n\t }\n\t\n\t var self = this;\n\t\n\t if (this.left_symbol) {\n\t var leftPoint = this.getLeft();\n\t\n\t if (!this.left_symbol.isPositioned) {\n\t this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n\t this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.left_symbol.symbolType === 'end') return;\n\t self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.left_symbol.isPositioned = true;\n\t\n\t this.left_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.right_symbol.symbolType === 'end') return;\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tParallel.prototype.renderLines = function() {\n\t if (this.path1_symbol) {\n\t this.drawLineTo(this.path1_symbol, this.path1_annotation, this.path1_direction);\n\t }\n\t\n\t if (this.path2_symbol) {\n\t this.drawLineTo(this.path2_symbol, this.path2_annotation, this.path2_direction);\n\t }\n\t\n\t if (this.path3_symbol) {\n\t this.drawLineTo(this.path3_symbol, this.path3_annotation, this.path3_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Parallel;\n\n/***/ }),\n/* 7 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 16);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 8);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\tvar Parallel = __webpack_require__(/*! ./flowchart.symbol.parallel */ 6);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if (symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else if (symbol instanceof(Parallel)) {\n\t symbol.path1 = function(nextSymbol) {\n\t symbol.path1_symbol = nextSymbol;\n\t if (symbol.path2_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.path2 = function(nextSymbol) {\n\t symbol.path2_symbol = nextSymbol;\n\t if (symbol.path3_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.path3 = function(nextSymbol) {\n\t symbol.path3_symbol = nextSymbol;\n\t if (symbol.path1_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t minX = 0,\n\t minY = 0,\n\t symbol,\n\t line;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t var x;\n\t var y;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t var leftX = symbol.getX()\n\t x = leftX + symbol.width;\n\t y = symbol.getY() + symbol.height;\n\t if (leftX < minX) {\n\t minX = leftX;\n\t }\n\t if (x > maxX) {\n\t maxX = x;\n\t }\n\t if (y > maxY) {\n\t maxY = y;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.lines.length; i < len; i++) {\n\t line = this.lines[i].getBBox();\n\t x = line.x;\n\t y = line.y;\n\t var x2 = line.x2;\n\t var y2 = line.y2;\n\t if (x < minX) {\n\t minX = x;\n\t }\n\t if (y < minY) {\n\t minY = y;\n\t }\n\t if (x2 > maxX) {\n\t maxX = x2;\n\t }\n\t if (y2 > maxY) {\n\t maxY = y2;\n\t }\n\t }\n\t\n\t var scale = this.options['scale'];\n\t var lineWidth = this.options['line-width'];\n\t\n\t if (this.minXFromSymbols < minX) minX = this.minXFromSymbols;\n\t\n\t if (minX < 0) minX -= lineWidth;\n\t if (minY < 0) minY -= lineWidth;\n\t\n\t var width = maxX + lineWidth - minX;\n\t var height = maxY + lineWidth - minY;\n\t\n\t this.paper.setSize(width * scale, height * scale);\n\t this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode && paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n/***/ }),\n/* 8 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ (function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {},\n\t 'parallel': {}\n\t } //,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n/***/ }),\n/* 9 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ (function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ }),\n/* 10 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ }),\n/* 11 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t this.symbol = symbol\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ }),\n/* 12 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ }),\n/* 13 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ }),\n/* 14 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ }),\n/* 15 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\n\t\t(function( $ ) {\n\t\t\tfunction paramFit(needle, haystack) {\n\t\t\t\treturn needle == haystack ||\n\t\t\t\t( Array.isArray(haystack) && (haystack.includes(needle) || haystack.includes(Number(needle)) ))\n\t\t\t}\n\t\t\tvar methods = {\n\t\t\t\tinit : function(options) {\n\t\t\t\t\treturn this.each(function() {\n\t\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\t\tthis.chart = parse($this.text());\n\t\t\t\t\t\t$this.html('');\n\t\t\t\t\t\tthis.chart.drawSVG(this, options);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tsetFlowStateByParam : function(param, paramValue, newFlowState) {\n\t\t\t\t\treturn this.each(function() {\n\t\t\t\t\t\tvar chart = this.chart;\n\t\n\t\t\t\t\t\t// @todo this should be part of Symbol API\n\t\t\t\t\t\tvar nextSymbolKeys = ['next', 'yes', 'no', 'path1', 'path2', 'path3'];\n\t\n\t\t\t\t\t\tfor (var property in chart.symbols) {\n\t\t\t\t\t\t\tif (chart.symbols.hasOwnProperty(property)) {\n\t\t\t\t\t\t\t\tvar symbol = chart.symbols[property];\n\t\t\t\t\t\t\t\tvar val = symbol.params[param];\n\t\t\t\t\t\t\t\tif (paramFit(val, paramValue)) {\n\t\t\t\t\t\t\t\t\tsymbol.flowstate = newFlowState;\n\t\t\t\t\t\t\t\t\tfor (var nski = 0; nski < nextSymbolKeys.length; nski++) {\n\t\t\t\t\t\t\t\t\t\tvar nextSymbolKey = nextSymbolKeys[nski];\n\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey] &&\n\t\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey]['params'] &&\n\t\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey]['params'][param] &&\n\t\t\t\t\t\t\t\t\t\t\tparamFit(symbol[nextSymbolKey]['params'][param], paramValue)\n\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\tsymbol.lineStyle[symbol[nextSymbolKey]['key']] = {stroke: chart.options()['flowstate'][newFlowState]['fill']};\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tchart.clean();\n\t\t\t\t\t\tchart.drawSVG(this);\n\t\t\t\t\t});\n\t\n\t\t\t\t},\n\t\t\t\tclearFlowState: function () {\n\t\t\t\t\treturn this.each(function() {\n\t\t\t\t\t\tvar chart = this.chart;\n\t\n\t\t\t\t\t\tfor (var property in chart.symbols) {\n\t\t\t\t\t\t\tif (chart.symbols.hasOwnProperty(property)) {\n\t\t\t\t\t\t\t\tvar node = chart.symbols[property];\n\t\t\t\t\t\t\t\tnode.flowstate = '';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tchart.clean();\n\t\t\t\t\t\tchart.drawSVG(this);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t\t$.fn.flowChart = function(methodOrOptions) {\n\t\t\t\tif ( methods[methodOrOptions] ) {\n\t\t\t\t\treturn methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 ));\n\t\t\t\t} else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ) {\n\t\t\t\t\t// Default to \"init\"\n\t\t\t\t\treturn methods.init.apply( this, arguments );\n\t\t\t\t} else {\n\t\t\t\t\t$.error( 'Method ' + methodOrOptions + ' does not exist on jQuery.flowChart' );\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ }),\n/* 16 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ (function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// flowchart.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 7856b1d7e6e22eb4c6fd","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./index.js\n// module id = 0\n// module chunks = 0","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.helpers.js\n// module id = 1\n// module chunks = 0","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n this.lineStyle = (options.lineStyle || {});\n this.key = (options.key || '');\n this.leftLines = [];\n this.rightLines = [];\n this.topLines = [];\n this.bottomLines = [];\n this.params = options.params;\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n \n //ndrqu Add click function with event and options params\n if (options.function) { \n this.text.attr({ 'cursor' : 'pointer' });\n\n this.text.node.addEventListener(\"click\", function(evt) {\n window[options.function](evt,options);\n }, false);\n }\n\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n\n //ndrqu Add click function with event and options params\n if (options.function) { \n symbol.node.addEventListener(\"click\", function(evt) {\n window[options.function](evt,options);\n }, false);\n symbol.attr({ 'cursor' : 'pointer' });\n }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var self = this;\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n if (self.next.symbolType === 'end') return;\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else if (this.next_direction === 'left') {\n\n var leftPoint = this.getLeft();\n\n if (!this.next.isPositioned) {\n this.next.setY(leftPoint.y - this.next.height/2);\n this.next.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n if (self.next.symbolType === 'end') return;\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, this.getAttr('arrow-text') || '', this.next_direction);\n } else {\n this.drawLineTo(this.next, this.getAttr('arrow-text') || '');\n }\n }\n};\n\nSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n if (this.connectedTo.indexOf(symbol) < 0) {\n this.connectedTo.push(symbol);\n }\n\n var x = this.getCenter().x,\n y = this.getCenter().y,\n right = this.getRight(),\n bottom = this.getBottom(),\n top = this.getTop(),\n left = this.getLeft();\n\n var symbolX = symbol.getCenter().x,\n symbolY = symbol.getCenter().y,\n symbolTop = symbol.getTop(),\n symbolRight = symbol.getRight(),\n symbolLeft = symbol.getLeft();\n\n var isOnSameColumn = x === symbolX,\n isOnSameLine = y === symbolY,\n isUnder = y < symbolY,\n isUpper = y > symbolY || this === symbol,\n isLeft = x > symbolX,\n isRight = x < symbolX;\n\n var maxX = 0,\n line,\n yOffset,\n lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n if (symbol.topLines.length === 0 && this.bottomLines.length === 0) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n } else {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n line = drawLine(this.chart, bottom, [\n {x: symbolTop.x, y: symbolTop.y - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n if (symbol.leftLines.length === 0 && this.rightLines.length === 0) {\n line = drawLine(this.chart, right, symbolLeft, text);\n } else {\n yOffset = Math.max(symbol.leftLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x, y: right.y - yOffset},\n {x: right.x, y: symbolLeft.y - yOffset},\n {x: symbolLeft.x, y: symbolLeft.y - yOffset},\n {x: symbolLeft.x, y: symbolLeft.y}\n ], text);\n }\n this.rightLines.push(line);\n symbol.leftLines.push(line);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n if (symbol.rightLines.length === 0 && this.leftLines.length === 0) {\n line = drawLine(this.chart, left, symbolRight, text);\n } else {\n yOffset = Math.max(symbol.rightLines.length, this.leftLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x, y: right.y - yOffset},\n {x: right.x, y: symbolRight.y - yOffset},\n {x: symbolRight.x, y: symbolRight.y - yOffset},\n {x: symbolRight.x, y: symbolRight.y}\n ], text);\n }\n this.leftLines.push(line);\n symbol.rightLines.push(line);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y - yOffset},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightLines.push(line);\n symbol.topLines.push(line);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y - yOffset},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightLines.push(line);\n symbol.topLines.push(line);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2 - yOffset},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n } else {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((!origin || origin === 'bottom') && isRight && isUnder) {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n if (symbolTop.x > maxX) maxX = symbolTop.x;\n } else if ((!origin || origin === 'bottom') && isRight) {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2 - yOffset},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((origin && origin === 'right') && isLeft) {\n yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightLines.push(line);\n symbol.topLines.push(line);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y - yOffset},\n {x: symbolTop.x, y: symbolTop.y - yOffset}\n ], text);\n this.rightLines.push(line);\n symbol.topLines.push(line);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2 - yOffset},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + lineLength/2;\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n var diffX = left.x - lineLength/2;\n if (symbolLeft.x < left.x) {\n diffX = symbolLeft.x - lineLength/2;\n }\n yOffset = Math.max(symbol.topLines.length, this.leftLines.length) * 10;\n line = drawLine(this.chart, left, [\n {x: diffX, y: left.y - yOffset},\n {x: diffX, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftLines.push(line);\n symbol.topLines.push(line);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\n yOffset = Math.max(symbol.topLines.length, this.leftLines.length) * 10;\n line = drawLine(this.chart, left, [\n {x: symbolTop.x + (left.x - symbolTop.x)/2, y: left.y},\n {x: symbolTop.x + (left.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftLines.push(line);\n symbol.topLines.push(line);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'top')) {\n yOffset = Math.max(symbol.topLines.length, this.topLines.length) * 10;\n line = drawLine(this.chart, top, [\n {x: top.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.topLines.push(line);\n symbol.topLines.push(line);\n this.topStart = true;\n symbol.topEnd = true;\n maxX = top.x;\n }\n\n //update line style\n if (this.lineStyle[symbol.key] && line){\n line.attr(this.lineStyle[symbol.key]);\n }\n\n if (line) {\n for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n var otherLine = this.chart.lines[l];\n\n var ePath = otherLine.attr('path'),\n lPath = line.attr('path');\n\n for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n var newPath = [];\n newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\n var line1_from_x = newPath[0][1];\n var line1_from_y = newPath[0][2];\n var line1_to_x = newPath[1][1];\n var line1_to_y = newPath[1][2];\n\n for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n var newLinePath = [];\n newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\n var line2_from_x = newLinePath[0][1];\n var line2_from_y = newLinePath[0][2];\n var line2_to_x = newLinePath[1][1];\n var line2_to_y = newLinePath[1][2];\n\n var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n if (res.onLine1 && res.onLine2) {\n\n var newSegment;\n if (line2_from_y === line2_to_y) {\n if (line2_from_x > line2_to_x) {\n newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n } else {\n if (line2_from_y > line2_to_y) {\n newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n }\n\n lP += 2;\n }\n }\n }\n }\n\n this.chart.lines.push(line);\n if (this.chart.minXFromSymbols === undefined || this.chart.minXFromSymbols > left.x) {\n this.chart.minXFromSymbols = left.x;\n }\n }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.js\n// module id = 2\n// module chunks = 0","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n var textAnchor = 'start';\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n if (from.x > firstTo.x) {\n x -= chart.options['text-margin']/2;\n textAnchor = 'end';\n } else {\n x += chart.options['text-margin']/2;\n }\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n if (from.y > firstTo.y) {\n y -= chart.options['text-margin']*2;\n }\n }\n }\n\n textPath.attr({\n 'text-anchor': textAnchor,\n 'font-size': chart.options['font-size'],\n 'fill': chart.options['font-color'],\n x: x,\n y: y\n });\n\n if (font) textPath.attr({ 'font': font });\n if (fontF) textPath.attr({ 'font-family': fontF });\n if (fontW) textPath.attr({ 'font-weight': fontW });\n }\n\n return line;\n}\n\nfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n var denominator, a, b, numerator1, numerator2, result = {\n x: null,\n y: null,\n onLine1: false,\n onLine2: false\n };\n denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n if (denominator === 0) {\n return result;\n }\n a = line1StartY - line2StartY;\n b = line1StartX - line2StartX;\n numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n a = numerator1 / denominator;\n b = numerator2 / denominator;\n\n // if we cast these lines infinitely in both directions, they intersect here:\n result.x = line1StartX + (a * (line1EndX - line1StartX));\n result.y = line1StartY + (a * (line1EndY - line1StartY));\n /*\n // it is worth noting that this should be the same as:\n x = line2StartX + (b * (line2EndX - line2StartX));\n y = line2StartX + (b * (line2EndY - line2StartY));\n */\n // if line1 is a segment and line2 is infinite, they intersect if:\n if (a > 0 && a < 1) {\n result.onLine1 = true;\n }\n // if line2 is a segment and line1 is infinite, they intersect if:\n if (b > 0 && b < 1) {\n result.onLine2 = true;\n }\n // if line1 and line2 are segments, they intersect if both of the above are true\n return result;\n}\n\nmodule.exports = {\n\tdrawPath: drawPath,\n\tdrawLine: drawLine,\n\tcheckLineIntersection: checkLineIntersection\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.functions.js\n// module id = 3\n// module chunks = 0","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\nvar Parallel = require('./flowchart.symbol.parallel');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s);\n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n case 'parallel':\n dispSymbols[s.key] = new Parallel(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else if (prevDisp instanceof(Parallel)) {\n if (prev.path1 === s) {\n prevDisp.path1(dispSymb);\n }\n if (prev.path2 === s) {\n prevDisp.path2(dispSymb);\n }\n if (prev.path3 === s) {\n prevDisp.path3(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (dispSymb instanceof(Parallel)) {\n if (s.path1) {\n constructChart(s.path1, dispSymb, s);\n }\n if (s.path2) {\n constructChart(s.path2, dispSymb, s);\n }\n if (s.path3) {\n constructChart(s.path3, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n },\n options: function() {\n return this.diagram.options;\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if (prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getStyle(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '{}';\n }\n\n function getSymbValue(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '';\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)];\n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n \n function getAnnotation(s) {\n\tvar startIndex = s.indexOf(\"(\") + 1, endIndex = s.indexOf(\")\");\n\tvar tmp = s.substring(startIndex, endIndex);\n\tif(tmp.indexOf(\",\") > 0) { tmp = tmp.substring(0, tmp.indexOf(\",\")); }\n\tvar tmp_split = tmp.split(\"@\");\n\tif(tmp_split.length > 1)\n\t\treturn startIndex >= 0 && endIndex >= 0 ? tmp_split[1] : \"\";\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0].trim();\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0].replace(/\\(.*\\)/, ''),\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null,\n function: null,\n lineStyle: {},\n params: {}\n };\n\n //parse parameters\n var params = parts[0].match(/\\((.*)\\)/);\n if (params && params.length > 1){\n var entries = params[1].split(',');\n for(var i = 0; i < entries.length; i++) {\n var entry = entries[i].split('=');\n if (entry.length == 2) {\n symbol.params[entry[0]] = entry[1];\n }\n }\n }\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':$') >= 0) {\n sub = symbol.text.split(':$');\n symbol.text = sub.shift();\n symbol.function = sub.join(':$');\n } else if (symbol.symbolType.indexOf(':$') >= 0) {\n sub = symbol.symbolType.split(':$');\n symbol.symbolType = sub.shift();\n symbol.function = sub.join(':$');\n } else if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n var ann = getAnnotation(line);\n if (ann) {\n line = line.replace('@' + ann, ''); \n }\n // flow\n var flowSymbols = line.split('->');\n for (var iS = 0, lenS = flowSymbols.length; iS < lenS; iS++) {\n var flowSymb = flowSymbols[iS];\n var symbVal = getSymbValue(flowSymb);\n\n if (symbVal === 'true' || symbVal === 'false') {\n // map true or false to yes or no respectively\n flowSymb = flowSymb.replace('true', 'yes');\n flowSymb = flowSymb.replace('false', 'no');\n }\n \n var next = getNextPath(flowSymb);\n var realSymb = getSymbol(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (ann) {\n if (realSymb.symbolType === 'condition') {\n if (next === \"yes\" || next === \"true\") {\n realSymb.yes_annotation = ann;\n } else {\n realSymb.no_annotation = ann;\n }\n } else if (realSymb.symbolType === 'parallel') {\n if (next === 'path1') {\n realSymb.path1_annotation = ann;\n } else if (next === 'path2') {\n realSymb.path2_annotation = ann;\n } else if (next === 'path3') {\n realSymb.path3_annotation = ann;\n }\n }\n ann = null;\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (iS + 1 < lenS) {\n var nextSymb = flowSymbols[iS + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n } else if (line.indexOf('@>') >= 0) {\n\n // line style\n var lineStyleSymbols = line.split('@>');\n for (var iSS = 0, lenSS = lineStyleSymbols.length; iSS < lenSS; iSS++) {\n if ((iSS + 1) !== lenSS) {\n var curSymb = getSymbol(lineStyleSymbols[iSS]);\n var nextSymbol = getSymbol(lineStyleSymbols[iSS+1]);\n\n curSymb['lineStyle'][nextSymbol.key] = JSON.parse(getStyle(lineStyleSymbols[iSS + 1]));\n }\n }\n }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.parse.js\n// module id = 4\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.yes_annotation = options.yes_annotation;\n this.no_annotation = options.no_annotation;\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = options.direction_yes;\n this.no_direction = options.direction_no;\n if (!this.no_direction && this.yes_direction === 'right') {\n this.no_direction = 'bottom';\n } else if (!this.yes_direction && this.no_direction === 'bottom') {\n this.yes_direction = 'right'\n }\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n this.symbol = symbol\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n var self = this;\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n if (self.right_symbol.symbolType === 'end') return;\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n \n if (this.left_symbol) {\n var leftPoint = this.getLeft();\n \n if (!this.left_symbol.isPositioned) {\n this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n \n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n \n if (hasSymbolUnder) {\n if (self.left_symbol.symbolType === 'end') return;\n self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n \n this.left_symbol.isPositioned = true;\n \n this.left_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.yes_annotation ? this.yes_annotation : this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.no_annotation ? this.no_annotation : this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.condition.js\n// module id = 5\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Parallel(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n this.path1_annotation = options.path1_annotation || '';\n this.path2_annotation = options.path2_annotation || '';\n this.path3_annotation = options.path3_annotation || '';\n this.textMargin = this.getAttr('text-margin');\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'top';\n this.params = options.params;\n if (options.direction_next === 'path1' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n if (options.direction_next === 'path2' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n if (options.direction_next === 'path3' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n\n if (options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3) {\n if (options.direction_path1 === 'right') {\n this.path2_direction = 'bottom';\n this.path1_direction = 'right';\n this.path3_direction = 'top';\n } else if (options.direction_path1 === 'top') {\n this.path2_direction = 'right';\n this.path1_direction = 'top';\n this.path3_direction = 'bottom';\n } else if (options.direction_path1 === 'left') {\n this.path2_direction = 'right';\n this.path1_direction = 'left';\n this.path3_direction = 'bottom';\n } else {\n this.path2_direction = 'right';\n this.path1_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else if (options.path1 && !options.direction_path1 && options.path2 && options.direction_path2 && options.path3 && !options.direction_path3) {\n if (options.direction_path2 === 'right') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'top';\n } else if (options.direction_path2 === 'left') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'left';\n this.path3_direction = 'right';\n } else {\n this.path1_direction = 'right';\n this.path2_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else if (options.path1 && !options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && options.direction_path3) {\n if (options.direction_path2 === 'right') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'top';\n this.path3_direction = 'right';\n } else if (options.direction_path2 === 'left') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'left';\n } else {\n this.path1_direction = 'right';\n this.path2_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else {\n this.path1_direction = options.direction_path1;\n this.path2_direction = options.direction_path2;\n this.path3_direction = options.direction_path3;\n }\n\n this.path1_direction = this.path1_direction || 'bottom';\n this.path2_direction = this.path2_direction || 'right';\n this.path3_direction = this.path3_direction || 'top';\n\n this.initialize();\n}\ninherits(Parallel, Symbol);\n\nParallel.prototype.render = function() {\n if (this.path1_direction) {\n this[this.path1_direction + '_symbol'] = this.path1_symbol;\n }\n\n if (this.path2_direction) {\n this[this.path2_direction + '_symbol'] = this.path2_symbol;\n }\n\n if (this.path3_direction) {\n this[this.path3_direction + '_symbol'] = this.path3_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.top_symbol) {\n var topPoint = this.getTop();\n\n if (!this.top_symbol.isPositioned) {\n this.top_symbol.shiftY(this.getY() - this.top_symbol.height - lineLength);\n this.top_symbol.setX(topPoint.x + this.top_symbol.width);\n this.top_symbol.isPositioned = true;\n\n this.top_symbol.render();\n }\n }\n\n var self = this;\n\n if (this.left_symbol) {\n var leftPoint = this.getLeft();\n\n if (!this.left_symbol.isPositioned) {\n this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n if (self.left_symbol.symbolType === 'end') return;\n self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.left_symbol.isPositioned = true;\n\n this.left_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n if (self.right_symbol.symbolType === 'end') return;\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nParallel.prototype.renderLines = function() {\n if (this.path1_symbol) {\n this.drawLineTo(this.path1_symbol, this.path1_annotation, this.path1_direction);\n }\n\n if (this.path2_symbol) {\n this.drawLineTo(this.path2_symbol, this.path2_annotation, this.path2_direction);\n }\n\n if (this.path3_symbol) {\n this.drawLineTo(this.path3_symbol, this.path3_annotation, this.path3_direction);\n }\n};\n\nmodule.exports = Parallel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.parallel.js\n// module id = 6\n// module chunks = 0","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\nvar Parallel = require('./flowchart.symbol.parallel');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if (symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else if (symbol instanceof(Parallel)) {\n symbol.path1 = function(nextSymbol) {\n symbol.path1_symbol = nextSymbol;\n if (symbol.path2_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.path2 = function(nextSymbol) {\n symbol.path2_symbol = nextSymbol;\n if (symbol.path3_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.path3 = function(nextSymbol) {\n symbol.path3_symbol = nextSymbol;\n if (symbol.path1_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n minX = 0,\n minY = 0,\n symbol,\n line;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n var x;\n var y;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n var leftX = symbol.getX()\n x = leftX + symbol.width;\n y = symbol.getY() + symbol.height;\n if (leftX < minX) {\n minX = leftX;\n }\n if (x > maxX) {\n maxX = x;\n }\n if (y > maxY) {\n maxY = y;\n }\n }\n\n for (i = 0, len = this.lines.length; i < len; i++) {\n line = this.lines[i].getBBox();\n x = line.x;\n y = line.y;\n var x2 = line.x2;\n var y2 = line.y2;\n if (x < minX) {\n minX = x;\n }\n if (y < minY) {\n minY = y;\n }\n if (x2 > maxX) {\n maxX = x2;\n }\n if (y2 > maxY) {\n maxY = y2;\n }\n }\n\n var scale = this.options['scale'];\n var lineWidth = this.options['line-width'];\n\n if (this.minXFromSymbols < minX) minX = this.minXFromSymbols;\n\n if (minX < 0) minX -= lineWidth;\n if (minY < 0) minY -= lineWidth;\n\n var width = maxX + lineWidth - minX;\n var height = maxY + lineWidth - minY;\n\n this.paper.setSize(width * scale, height * scale);\n this.paper.setViewBox(minX, minY, width, height, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode && paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.chart.js\n// module id = 7\n// module chunks = 0","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {},\n 'parallel': {}\n } //,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.defaults.js\n// module id = 8\n// module chunks = 0","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.shim.js\n// module id = 9\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.end.js\n// module id = 10\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n this.symbol = symbol\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.inputoutput.js\n// module id = 11\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.operation.js\n// module id = 12\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.start.js\n// module id = 13\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.subroutine.js\n// module id = 14\n// module chunks = 0","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\n\t(function( $ ) {\n\t\tfunction paramFit(needle, haystack) {\n\t\t\treturn needle == haystack ||\n\t\t\t( Array.isArray(haystack) && (haystack.includes(needle) || haystack.includes(Number(needle)) ))\n\t\t}\n\t\tvar methods = {\n\t\t\tinit : function(options) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tthis.chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tthis.chart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t},\n\t\t\tsetFlowStateByParam : function(param, paramValue, newFlowState) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar chart = this.chart;\n\n\t\t\t\t\t// @todo this should be part of Symbol API\n\t\t\t\t\tvar nextSymbolKeys = ['next', 'yes', 'no', 'path1', 'path2', 'path3'];\n\n\t\t\t\t\tfor (var property in chart.symbols) {\n\t\t\t\t\t\tif (chart.symbols.hasOwnProperty(property)) {\n\t\t\t\t\t\t\tvar symbol = chart.symbols[property];\n\t\t\t\t\t\t\tvar val = symbol.params[param];\n\t\t\t\t\t\t\tif (paramFit(val, paramValue)) {\n\t\t\t\t\t\t\t\tsymbol.flowstate = newFlowState;\n\t\t\t\t\t\t\t\tfor (var nski = 0; nski < nextSymbolKeys.length; nski++) {\n\t\t\t\t\t\t\t\t\tvar nextSymbolKey = nextSymbolKeys[nski];\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey] &&\n\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey]['params'] &&\n\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey]['params'][param] &&\n\t\t\t\t\t\t\t\t\t\tparamFit(symbol[nextSymbolKey]['params'][param], paramValue)\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tsymbol.lineStyle[symbol[nextSymbolKey]['key']] = {stroke: chart.options()['flowstate'][newFlowState]['fill']};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tchart.clean();\n\t\t\t\t\tchart.drawSVG(this);\n\t\t\t\t});\n\n\t\t\t},\n\t\t\tclearFlowState: function () {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar chart = this.chart;\n\n\t\t\t\t\tfor (var property in chart.symbols) {\n\t\t\t\t\t\tif (chart.symbols.hasOwnProperty(property)) {\n\t\t\t\t\t\t\tvar node = chart.symbols[property];\n\t\t\t\t\t\t\tnode.flowstate = '';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tchart.clean();\n\t\t\t\t\tchart.drawSVG(this);\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\t$.fn.flowChart = function(methodOrOptions) {\n\t\t\tif ( methods[methodOrOptions] ) {\n\t\t\t\treturn methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 ));\n\t\t\t} else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ) {\n\t\t\t\t// Default to \"init\"\n\t\t\t\treturn methods.init.apply( this, arguments );\n\t\t\t} else {\n\t\t\t\t$.error( 'Method ' + methodOrOptions + ' does not exist on jQuery.flowChart' );\n\t\t\t}\n\t\t};\n\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/jquery-plugin.js\n// module id = 15\n// module chunks = 0","module.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"Raphael\"\n// module id = 16\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/releasenotes.md b/releasenotes.md index f00b7c13..665f6eb2 100644 --- a/releasenotes.md +++ b/releasenotes.md @@ -1,3 +1,7 @@ +### v1.16.0 + +- Custom annotations for parallel [#225](https://github.com/adrai/flowchart.js/issues/225) + ### v1.15.0 - Introduce types [#214](https://github.com/adrai/flowchart.js/pull/214) thanks to [Mister-Hope](https://github.com/Mister-Hope) diff --git a/site b/site index b7bc8a58..d70e761d 160000 --- a/site +++ b/site @@ -1 +1 @@ -Subproject commit b7bc8a582ebcc43d0d2c4a64429e088e139e1f26 +Subproject commit d70e761d83f995515ca947516e338ac7076f8da6 diff --git a/src/flowchart.parse.js b/src/flowchart.parse.js index 228ec408..08514c94 100644 --- a/src/flowchart.parse.js +++ b/src/flowchart.parse.js @@ -313,10 +313,21 @@ function parse(input) { } if (ann) { - if (next == "yes" || next == "true") - realSymb.yes_annotation = ann; - else - realSymb.no_annotation = ann; + if (realSymb.symbolType === 'condition') { + if (next === "yes" || next === "true") { + realSymb.yes_annotation = ann; + } else { + realSymb.no_annotation = ann; + } + } else if (realSymb.symbolType === 'parallel') { + if (next === 'path1') { + realSymb.path1_annotation = ann; + } else if (next === 'path2') { + realSymb.path2_annotation = ann; + } else if (next === 'path3') { + realSymb.path3_annotation = ann; + } + } ann = null; } diff --git a/src/flowchart.symbol.condition.js b/src/flowchart.symbol.condition.js index a01624fc..e9459492 100644 --- a/src/flowchart.symbol.condition.js +++ b/src/flowchart.symbol.condition.js @@ -69,7 +69,7 @@ function Condition(chart, options) { inherits(Condition, Symbol); Condition.prototype.render = function() { - + var self = this; if (this.yes_direction) { this[this.yes_direction + '_symbol'] = this.yes_symbol; } @@ -100,7 +100,6 @@ Condition.prototype.render = function() { this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2); this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength); - var self = this; (function shift() { var hasSymbolUnder = false; var symb; @@ -135,7 +134,7 @@ Condition.prototype.render = function() { if (!this.left_symbol.isPositioned) { this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2); this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength)); - var self = this; + (function shift() { var hasSymbolUnder = false; var symb; diff --git a/src/flowchart.symbol.parallel.js b/src/flowchart.symbol.parallel.js index 4d6013db..bf7ae0c2 100644 --- a/src/flowchart.symbol.parallel.js +++ b/src/flowchart.symbol.parallel.js @@ -5,6 +5,9 @@ function Parallel(chart, options) { var symbol = chart.paper.rect(0, 0, 0, 0); options = options || {}; Symbol.call(this, chart, options, symbol); + this.path1_annotation = options.path1_annotation || ''; + this.path2_annotation = options.path2_annotation || ''; + this.path3_annotation = options.path3_annotation || ''; this.textMargin = this.getAttr('text-margin'); this.path1_direction = 'bottom'; this.path2_direction = 'right'; @@ -81,7 +84,6 @@ function Parallel(chart, options) { inherits(Parallel, Symbol); Parallel.prototype.render = function() { - if (this.path1_direction) { this[this.path1_direction + '_symbol'] = this.path1_symbol; } @@ -193,15 +195,15 @@ Parallel.prototype.render = function() { Parallel.prototype.renderLines = function() { if (this.path1_symbol) { - this.drawLineTo(this.path1_symbol, '', this.path1_direction); + this.drawLineTo(this.path1_symbol, this.path1_annotation, this.path1_direction); } if (this.path2_symbol) { - this.drawLineTo(this.path2_symbol, '', this.path2_direction); + this.drawLineTo(this.path2_symbol, this.path2_annotation, this.path2_direction); } if (this.path3_symbol) { - this.drawLineTo(this.path3_symbol, '', this.path3_direction); + this.drawLineTo(this.path3_symbol, this.path3_annotation, this.path3_direction); } }; From 901d11091328dba0135ea747715c268ba3577f92 Mon Sep 17 00:00:00 2001 From: Adriano Raiano Date: Mon, 18 Oct 2021 23:39:58 +0200 Subject: [PATCH 04/18] update image --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index eba2fa5c..572d4fed 100644 --- a/README.md +++ b/README.md @@ -241,7 +241,7 @@ para(path3@an3, bottom)->e Demonstration - ![img](https://user-images.githubusercontent.com/37659961/90231386-85a3ed80-de34-11ea-8265-976c36b2f0e2.png) + ![img](https://user-images.githubusercontent.com/1086194/137810516-0d7d7307-fc55-466f-b06d-a6ca9f6b8785.png)
From 7dd92e3972466946e52dc7d53bd1c7023aa8bf03 Mon Sep 17 00:00:00 2001 From: Otoniel Guajardo Date: Thu, 28 Oct 2021 01:33:14 -0500 Subject: [PATCH 05/18] roundness option sets rx and ry symbol attr (#227) --- src/flowchart.defaults.js | 1 + src/flowchart.symbol.js | 2 ++ types/index.d.ts | 1 + 3 files changed, 4 insertions(+) diff --git a/src/flowchart.defaults.js b/src/flowchart.defaults.js index f133ea94..a241db94 100644 --- a/src/flowchart.defaults.js +++ b/src/flowchart.defaults.js @@ -2,6 +2,7 @@ module.exports = { 'x': 0, 'y': 0, + 'roundness': 0, 'line-width': 3, 'line-length': 50, 'text-margin': 10, diff --git a/src/flowchart.symbol.js b/src/flowchart.symbol.js index 536bf604..0bae7511 100644 --- a/src/flowchart.symbol.js +++ b/src/flowchart.symbol.js @@ -83,6 +83,8 @@ function Symbol(chart, options, symbol) { }); symbol.node.setAttribute('class', this.getAttr('class')); + symbol.node.setAttribute('ry', this.getAttr('roundness')); + symbol.node.setAttribute('rx', this.getAttr('roundness')); if (options.link) { symbol.attr('href', options.link); } if (options.target) { symbol.attr('target', options.target); } diff --git a/types/index.d.ts b/types/index.d.ts index 15e91892..fceb057f 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -11,6 +11,7 @@ declare module "flowchart.js" { "line-color": string; "element-color": string; fill: string; + roundness: number; "yes-text": string; "no-text": string; "arrow-end": string; From 8cc0d01ffdf162422010fc6bbf36ff4f341a05cf Mon Sep 17 00:00:00 2001 From: Adriano Raiano Date: Thu, 28 Oct 2021 08:35:17 +0200 Subject: [PATCH 06/18] new version --- package.json | 2 +- release/flowchart.js | 6 ++++-- release/flowchart.js.map | 2 +- release/flowchart.min.js | 6 +++--- release/flowchart.min.js.map | 2 +- releasenotes.md | 4 ++++ site | 2 +- 7 files changed, 15 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index d7f7ce28..fa9f239c 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "author": "adrai", "name": "flowchart.js", - "version": "1.16.0", + "version": "1.17.0", "main": "./index", "private": false, "engines": { diff --git a/release/flowchart.js b/release/flowchart.js index 7941b1f9..64403416 100644 --- a/release/flowchart.js +++ b/release/flowchart.js @@ -1,4 +1,4 @@ -// flowchart.js, v1.16.0 +// flowchart.js, v1.17.0 // Copyright (c)2021 Adriano Raiano (adrai). // Distributed under MIT license // http://adrai.github.io/flowchart.js @@ -170,7 +170,8 @@ "stroke-width": this.getAttr("line-width"), width: this.text.getBBox().width + 2 * tmpMargin, height: this.text.getBBox().height + 2 * tmpMargin - }), symbol.node.setAttribute("class", this.getAttr("class")), options.link && symbol.attr("href", options.link), + }), symbol.node.setAttribute("class", this.getAttr("class")), symbol.node.setAttribute("ry", this.getAttr("roundness")), + symbol.node.setAttribute("rx", this.getAttr("roundness")), options.link && symbol.attr("href", options.link), options.target && symbol.attr("target", options.target), //ndrqu Add click function with event and options params options.function && (symbol.node.addEventListener("click", function(evt) { window[options.function](evt, options); @@ -1053,6 +1054,7 @@ module.exports = { x: 0, y: 0, + roundness: 0, "line-width": 3, "line-length": 50, "text-margin": 10, diff --git a/release/flowchart.js.map b/release/flowchart.js.map index b7cfa2ea..cced1f3a 100644 --- a/release/flowchart.js.map +++ b/release/flowchart.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.js","webpack:///webpack/bootstrap 741234b9605c2cc42761","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.symbol.parallel.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_16__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","lineStyle","key","leftLines","rightLines","topLines","bottomLines","params","next_direction","next","undefined","text","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","function","cursor","addEventListener","evt","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","self","lineLength","rightPoint","isPositioned","shift","symb","hasSymbolUnder","len","diff","Math","abs","leftPoint","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","yOffset","right","bottom","top","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","max","rightStart","topEnd","bottomStart","diffX","leftStart","topStart","leftEnd","rightEnd","l","llen","lines","otherLine","ePath","lPath","iP","lenP","newPath","line1_from_x","line1_from_y","line1_to_x","line1_to_y","lP","lenlP","newLinePath","line2_from_x","line2_from_y","line2_to_x","line2_to_y","res","onLine1","onLine2","newSegment","splice","minXFromSymbols","maxXFromLine","drawPath","location","points","path","pathValues","from","to","toString","arrow-end","centerText","textPath","textAnchor","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getStyle","s","startIndex","endIndex","getSymbValue","getSymbol","getNextPath","flowSymb","getAnnotation","tmp","tmp_split","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Parallel","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","path1","path2","path3","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","parts","match","entries","entry","sub","join","txtAndState","pop","ann","flowSymbols","iS","lenS","symbVal","realSymb","direction","condOpt","yes_annotation","no_annotation","path1_annotation","path2_annotation","path3_annotation","nextSymb","lineStyleSymbols","iSS","lenSS","curSymb","nextSymbol","JSON","textMargin","yes_direction","direction_yes","no_direction","direction_no","startX","startY","yes_symbol","no_symbol","bottom_symbol","right_symbol","left_symbol","rect","path1_direction","path2_direction","path3_direction","direction_next","direction_path1","direction_path2","direction_path3","path1_symbol","path2_symbol","path3_symbol","top_symbol","topPoint","Raphael","handle","flowChart","maxHeight","maxY","minX","minY","leftX","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","parallel","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","innerWrap","jQuery","$","paramFit","needle","haystack","isArray","includes","methods","init","each","$this","html","setFlowStateByParam","param","paramValue","newFlowState","nextSymbolKeys","property","hasOwnProperty","val","nski","nextSymbolKey","clearFlowState","fn","methodOrOptions","apply","slice","error"],"mappings":"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","file":"flowchart.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_16__) {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_16__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 9);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 15);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ }),\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ (function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ }),\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t this.lineStyle = (options.lineStyle || {});\n\t this.key = (options.key || '');\n\t this.leftLines = [];\n\t this.rightLines = [];\n\t this.topLines = [];\n\t this.bottomLines = [];\n\t this.params = options.params;\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t \n\t //ndrqu Add click function with event and options params\n\t if (options.function) { \n\t this.text.attr({ 'cursor' : 'pointer' });\n\t\n\t this.text.node.addEventListener(\"click\", function(evt) {\n\t window[options.function](evt,options);\n\t }, false);\n\t }\n\t\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t\n\t //ndrqu Add click function with event and options params\n\t if (options.function) { \n\t symbol.node.addEventListener(\"click\", function(evt) {\n\t window[options.function](evt,options);\n\t }, false);\n\t symbol.attr({ 'cursor' : 'pointer' });\n\t }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var self = this;\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.next.symbolType === 'end') return;\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else if (this.next_direction === 'left') {\n\t\n\t var leftPoint = this.getLeft();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.setY(leftPoint.y - this.next.height/2);\n\t this.next.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.next.symbolType === 'end') return;\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, this.getAttr('arrow-text') || '', this.next_direction);\n\t } else {\n\t this.drawLineTo(this.next, this.getAttr('arrow-text') || '');\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n\t if (this.connectedTo.indexOf(symbol) < 0) {\n\t this.connectedTo.push(symbol);\n\t }\n\t\n\t var x = this.getCenter().x,\n\t y = this.getCenter().y,\n\t right = this.getRight(),\n\t bottom = this.getBottom(),\n\t top = this.getTop(),\n\t left = this.getLeft();\n\t\n\t var symbolX = symbol.getCenter().x,\n\t symbolY = symbol.getCenter().y,\n\t symbolTop = symbol.getTop(),\n\t symbolRight = symbol.getRight(),\n\t symbolLeft = symbol.getLeft();\n\t\n\t var isOnSameColumn = x === symbolX,\n\t isOnSameLine = y === symbolY,\n\t isUnder = y < symbolY,\n\t isUpper = y > symbolY || this === symbol,\n\t isLeft = x > symbolX,\n\t isRight = x < symbolX;\n\t\n\t var maxX = 0,\n\t line,\n\t yOffset,\n\t lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t if (symbol.topLines.length === 0 && this.bottomLines.length === 0) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\n\t } else {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t line = drawLine(this.chart, bottom, [\n\t {x: symbolTop.x, y: symbolTop.y - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n\t if (symbol.leftLines.length === 0 && this.rightLines.length === 0) {\n\t line = drawLine(this.chart, right, symbolLeft, text);\n\t } else {\n\t yOffset = Math.max(symbol.leftLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x, y: right.y - yOffset},\n\t {x: right.x, y: symbolLeft.y - yOffset},\n\t {x: symbolLeft.x, y: symbolLeft.y - yOffset},\n\t {x: symbolLeft.x, y: symbolLeft.y}\n\t ], text);\n\t }\n\t this.rightLines.push(line);\n\t symbol.leftLines.push(line);\n\t this.rightStart = true;\n\t symbol.leftEnd = true;\n\t maxX = symbolLeft.x;\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n\t if (symbol.rightLines.length === 0 && this.leftLines.length === 0) {\n\t line = drawLine(this.chart, left, symbolRight, text);\n\t } else {\n\t yOffset = Math.max(symbol.rightLines.length, this.leftLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x, y: right.y - yOffset},\n\t {x: right.x, y: symbolRight.y - yOffset},\n\t {x: symbolRight.x, y: symbolRight.y - yOffset},\n\t {x: symbolRight.x, y: symbolRight.y}\n\t ], text);\n\t }\n\t this.leftLines.push(line);\n\t symbol.rightLines.push(line);\n\t this.leftStart = true;\n\t symbol.rightEnd = true;\n\t maxX = symbolRight.x;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n\t yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y - yOffset},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightLines.push(line);\n\t symbol.topLines.push(line);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n\t yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y - yOffset},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightLines.push(line);\n\t symbol.topLines.push(line);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2 - yOffset},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t } else {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((!origin || origin === 'bottom') && isRight && isUnder) {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t if (symbolTop.x > maxX) maxX = symbolTop.x;\n\t } else if ((!origin || origin === 'bottom') && isRight) {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2 - yOffset},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((origin && origin === 'right') && isLeft) {\n\t yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightLines.push(line);\n\t symbol.topLines.push(line);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'right') && isRight) {\n\t yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - yOffset}\n\t ], text);\n\t this.rightLines.push(line);\n\t symbol.topLines.push(line);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2 - yOffset},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + lineLength/2;\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n\t var diffX = left.x - lineLength/2;\n\t if (symbolLeft.x < left.x) {\n\t diffX = symbolLeft.x - lineLength/2;\n\t }\n\t yOffset = Math.max(symbol.topLines.length, this.leftLines.length) * 10;\n\t line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y - yOffset},\n\t {x: diffX, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftLines.push(line);\n\t symbol.topLines.push(line);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\n\t yOffset = Math.max(symbol.topLines.length, this.leftLines.length) * 10;\n\t line = drawLine(this.chart, left, [\n\t {x: symbolTop.x + (left.x - symbolTop.x)/2, y: left.y},\n\t {x: symbolTop.x + (left.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftLines.push(line);\n\t symbol.topLines.push(line);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'top')) {\n\t yOffset = Math.max(symbol.topLines.length, this.topLines.length) * 10;\n\t line = drawLine(this.chart, top, [\n\t {x: top.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.topLines.push(line);\n\t symbol.topLines.push(line);\n\t this.topStart = true;\n\t symbol.topEnd = true;\n\t maxX = top.x;\n\t }\n\t\n\t //update line style\n\t if (this.lineStyle[symbol.key] && line){\n\t line.attr(this.lineStyle[symbol.key]);\n\t }\n\t\n\t if (line) {\n\t for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n\t var otherLine = this.chart.lines[l];\n\t\n\t var ePath = otherLine.attr('path'),\n\t lPath = line.attr('path');\n\t\n\t for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n\t var newPath = [];\n\t newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n\t newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\t\n\t var line1_from_x = newPath[0][1];\n\t var line1_from_y = newPath[0][2];\n\t var line1_to_x = newPath[1][1];\n\t var line1_to_y = newPath[1][2];\n\t\n\t for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n\t var newLinePath = [];\n\t newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n\t newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\t\n\t var line2_from_x = newLinePath[0][1];\n\t var line2_from_y = newLinePath[0][2];\n\t var line2_to_x = newLinePath[1][1];\n\t var line2_to_y = newLinePath[1][2];\n\t\n\t var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n\t if (res.onLine1 && res.onLine2) {\n\t\n\t var newSegment;\n\t if (line2_from_y === line2_to_y) {\n\t if (line2_from_x > line2_to_x) {\n\t newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t } else {\n\t if (line2_from_y > line2_to_y) {\n\t newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t }\n\t\n\t lP += 2;\n\t }\n\t }\n\t }\n\t }\n\t\n\t this.chart.lines.push(line);\n\t if (this.chart.minXFromSymbols === undefined || this.chart.minXFromSymbols > left.x) {\n\t this.chart.minXFromSymbols = left.x;\n\t }\n\t }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ }),\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ (function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t var textAnchor = 'start';\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t if (from.x > firstTo.x) {\n\t x -= chart.options['text-margin']/2;\n\t textAnchor = 'end';\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t }\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t if (from.y > firstTo.y) {\n\t y -= chart.options['text-margin']*2;\n\t }\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': textAnchor,\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ }),\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 7);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 13);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 10);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 12);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 11);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 14);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\tvar Parallel = __webpack_require__(/*! ./flowchart.symbol.parallel */ 6);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s);\n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t case 'parallel':\n\t dispSymbols[s.key] = new Parallel(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else if (prevDisp instanceof(Parallel)) {\n\t if (prev.path1 === s) {\n\t prevDisp.path1(dispSymb);\n\t }\n\t if (prev.path2 === s) {\n\t prevDisp.path2(dispSymb);\n\t }\n\t if (prev.path3 === s) {\n\t prevDisp.path3(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (dispSymb instanceof(Parallel)) {\n\t if (s.path1) {\n\t constructChart(s.path1, dispSymb, s);\n\t }\n\t if (s.path2) {\n\t constructChart(s.path2, dispSymb, s);\n\t }\n\t if (s.path3) {\n\t constructChart(s.path3, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t },\n\t options: function() {\n\t return this.diagram.options;\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if (prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getStyle(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '{}';\n\t }\n\t\n\t function getSymbValue(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '';\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)];\n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t \n\t function getAnnotation(s) {\n\t\tvar startIndex = s.indexOf(\"(\") + 1, endIndex = s.indexOf(\")\");\n\t\tvar tmp = s.substring(startIndex, endIndex);\n\t\tif(tmp.indexOf(\",\") > 0) { tmp = tmp.substring(0, tmp.indexOf(\",\")); }\n\t\tvar tmp_split = tmp.split(\"@\");\n\t\tif(tmp_split.length > 1)\n\t\t\treturn startIndex >= 0 && endIndex >= 0 ? tmp_split[1] : \"\";\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0].trim();\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0].replace(/\\(.*\\)/, ''),\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null,\n\t function: null,\n\t lineStyle: {},\n\t params: {}\n\t };\n\t\n\t //parse parameters\n\t var params = parts[0].match(/\\((.*)\\)/);\n\t if (params && params.length > 1){\n\t var entries = params[1].split(',');\n\t for(var i = 0; i < entries.length; i++) {\n\t var entry = entries[i].split('=');\n\t if (entry.length == 2) {\n\t symbol.params[entry[0]] = entry[1];\n\t }\n\t }\n\t }\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':$') >= 0) {\n\t sub = symbol.text.split(':$');\n\t symbol.text = sub.shift();\n\t symbol.function = sub.join(':$');\n\t } else if (symbol.symbolType.indexOf(':$') >= 0) {\n\t sub = symbol.symbolType.split(':$');\n\t symbol.symbolType = sub.shift();\n\t symbol.function = sub.join(':$');\n\t } else if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t var ann = getAnnotation(line);\n\t if (ann) {\n\t line = line.replace('@' + ann, ''); \n\t }\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var iS = 0, lenS = flowSymbols.length; iS < lenS; iS++) {\n\t var flowSymb = flowSymbols[iS];\n\t var symbVal = getSymbValue(flowSymb);\n\t\n\t if (symbVal === 'true' || symbVal === 'false') {\n\t // map true or false to yes or no respectively\n\t flowSymb = flowSymb.replace('true', 'yes');\n\t flowSymb = flowSymb.replace('false', 'no');\n\t }\n\t \n\t var next = getNextPath(flowSymb);\n\t var realSymb = getSymbol(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (ann) {\n\t if (realSymb.symbolType === 'condition') {\n\t if (next === \"yes\" || next === \"true\") {\n\t realSymb.yes_annotation = ann;\n\t } else {\n\t realSymb.no_annotation = ann;\n\t }\n\t } else if (realSymb.symbolType === 'parallel') {\n\t if (next === 'path1') {\n\t realSymb.path1_annotation = ann;\n\t } else if (next === 'path2') {\n\t realSymb.path2_annotation = ann;\n\t } else if (next === 'path3') {\n\t realSymb.path3_annotation = ann;\n\t }\n\t }\n\t ann = null;\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (iS + 1 < lenS) {\n\t var nextSymb = flowSymbols[iS + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t } else if (line.indexOf('@>') >= 0) {\n\t\n\t // line style\n\t var lineStyleSymbols = line.split('@>');\n\t for (var iSS = 0, lenSS = lineStyleSymbols.length; iSS < lenSS; iSS++) {\n\t if ((iSS + 1) !== lenSS) {\n\t var curSymb = getSymbol(lineStyleSymbols[iSS]);\n\t var nextSymbol = getSymbol(lineStyleSymbols[iSS+1]);\n\t\n\t curSymb['lineStyle'][nextSymbol.key] = JSON.parse(getStyle(lineStyleSymbols[iSS + 1]));\n\t }\n\t }\n\t }\n\t\n\t }\n\t return chart;\n\t}\n\t\n\tmodule.exports = parse;\n\n\n/***/ }),\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction Condition(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.yes_annotation = options.yes_annotation;\n\t this.no_annotation = options.no_annotation;\n\t this.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = options.direction_yes;\n\t this.no_direction = options.direction_no;\n\t if (!this.no_direction && this.yes_direction === 'right') {\n\t this.no_direction = 'bottom';\n\t } else if (!this.yes_direction && this.no_direction === 'bottom') {\n\t this.yes_direction = 'right'\n\t }\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t this.symbol = symbol\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t var self = this;\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.right_symbol.symbolType === 'end') return;\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t \n\t if (this.left_symbol) {\n\t var leftPoint = this.getLeft();\n\t \n\t if (!this.left_symbol.isPositioned) {\n\t this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n\t this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t \n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t \n\t if (hasSymbolUnder) {\n\t if (self.left_symbol.symbolType === 'end') return;\n\t self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t \n\t this.left_symbol.isPositioned = true;\n\t \n\t this.left_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.yes_annotation ? this.yes_annotation : this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.no_annotation ? this.no_annotation : this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ }),\n/* 6 */\n/*!******************************************!*\\\n !*** ./src/flowchart.symbol.parallel.js ***!\n \\******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Parallel(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t this.path1_annotation = options.path1_annotation || '';\n\t this.path2_annotation = options.path2_annotation || '';\n\t this.path3_annotation = options.path3_annotation || '';\n\t this.textMargin = this.getAttr('text-margin');\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t this.params = options.params;\n\t if (options.direction_next === 'path1' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path2' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path3' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t\n\t if (options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path1 === 'right') {\n\t this.path2_direction = 'bottom';\n\t this.path1_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path1 === 'top') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'top';\n\t this.path3_direction = 'bottom';\n\t } else if (options.direction_path1 === 'left') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'left';\n\t this.path3_direction = 'bottom';\n\t } else {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'left';\n\t this.path3_direction = 'right';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'top';\n\t this.path3_direction = 'right';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'left';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else {\n\t this.path1_direction = options.direction_path1;\n\t this.path2_direction = options.direction_path2;\n\t this.path3_direction = options.direction_path3;\n\t }\n\t\n\t this.path1_direction = this.path1_direction || 'bottom';\n\t this.path2_direction = this.path2_direction || 'right';\n\t this.path3_direction = this.path3_direction || 'top';\n\t\n\t this.initialize();\n\t}\n\tinherits(Parallel, Symbol);\n\t\n\tParallel.prototype.render = function() {\n\t if (this.path1_direction) {\n\t this[this.path1_direction + '_symbol'] = this.path1_symbol;\n\t }\n\t\n\t if (this.path2_direction) {\n\t this[this.path2_direction + '_symbol'] = this.path2_symbol;\n\t }\n\t\n\t if (this.path3_direction) {\n\t this[this.path3_direction + '_symbol'] = this.path3_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.top_symbol) {\n\t var topPoint = this.getTop();\n\t\n\t if (!this.top_symbol.isPositioned) {\n\t this.top_symbol.shiftY(this.getY() - this.top_symbol.height - lineLength);\n\t this.top_symbol.setX(topPoint.x + this.top_symbol.width);\n\t this.top_symbol.isPositioned = true;\n\t\n\t this.top_symbol.render();\n\t }\n\t }\n\t\n\t var self = this;\n\t\n\t if (this.left_symbol) {\n\t var leftPoint = this.getLeft();\n\t\n\t if (!this.left_symbol.isPositioned) {\n\t this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n\t this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.left_symbol.symbolType === 'end') return;\n\t self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.left_symbol.isPositioned = true;\n\t\n\t this.left_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.right_symbol.symbolType === 'end') return;\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tParallel.prototype.renderLines = function() {\n\t if (this.path1_symbol) {\n\t this.drawLineTo(this.path1_symbol, this.path1_annotation, this.path1_direction);\n\t }\n\t\n\t if (this.path2_symbol) {\n\t this.drawLineTo(this.path2_symbol, this.path2_annotation, this.path2_direction);\n\t }\n\t\n\t if (this.path3_symbol) {\n\t this.drawLineTo(this.path3_symbol, this.path3_annotation, this.path3_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Parallel;\n\n/***/ }),\n/* 7 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 16);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 8);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\tvar Parallel = __webpack_require__(/*! ./flowchart.symbol.parallel */ 6);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if (symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else if (symbol instanceof(Parallel)) {\n\t symbol.path1 = function(nextSymbol) {\n\t symbol.path1_symbol = nextSymbol;\n\t if (symbol.path2_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.path2 = function(nextSymbol) {\n\t symbol.path2_symbol = nextSymbol;\n\t if (symbol.path3_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.path3 = function(nextSymbol) {\n\t symbol.path3_symbol = nextSymbol;\n\t if (symbol.path1_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t minX = 0,\n\t minY = 0,\n\t symbol,\n\t line;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t var x;\n\t var y;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t var leftX = symbol.getX()\n\t x = leftX + symbol.width;\n\t y = symbol.getY() + symbol.height;\n\t if (leftX < minX) {\n\t minX = leftX;\n\t }\n\t if (x > maxX) {\n\t maxX = x;\n\t }\n\t if (y > maxY) {\n\t maxY = y;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.lines.length; i < len; i++) {\n\t line = this.lines[i].getBBox();\n\t x = line.x;\n\t y = line.y;\n\t var x2 = line.x2;\n\t var y2 = line.y2;\n\t if (x < minX) {\n\t minX = x;\n\t }\n\t if (y < minY) {\n\t minY = y;\n\t }\n\t if (x2 > maxX) {\n\t maxX = x2;\n\t }\n\t if (y2 > maxY) {\n\t maxY = y2;\n\t }\n\t }\n\t\n\t var scale = this.options['scale'];\n\t var lineWidth = this.options['line-width'];\n\t\n\t if (this.minXFromSymbols < minX) minX = this.minXFromSymbols;\n\t\n\t if (minX < 0) minX -= lineWidth;\n\t if (minY < 0) minY -= lineWidth;\n\t\n\t var width = maxX + lineWidth - minX;\n\t var height = maxY + lineWidth - minY;\n\t\n\t this.paper.setSize(width * scale, height * scale);\n\t this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode && paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n/***/ }),\n/* 8 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ (function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {},\n\t 'parallel': {}\n\t } //,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n/***/ }),\n/* 9 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ (function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ }),\n/* 10 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ }),\n/* 11 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t this.symbol = symbol\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ }),\n/* 12 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ }),\n/* 13 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ }),\n/* 14 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ }),\n/* 15 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\n\t\t(function( $ ) {\n\t\t\tfunction paramFit(needle, haystack) {\n\t\t\t\treturn needle == haystack ||\n\t\t\t\t( Array.isArray(haystack) && (haystack.includes(needle) || haystack.includes(Number(needle)) ))\n\t\t\t}\n\t\t\tvar methods = {\n\t\t\t\tinit : function(options) {\n\t\t\t\t\treturn this.each(function() {\n\t\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\t\tthis.chart = parse($this.text());\n\t\t\t\t\t\t$this.html('');\n\t\t\t\t\t\tthis.chart.drawSVG(this, options);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tsetFlowStateByParam : function(param, paramValue, newFlowState) {\n\t\t\t\t\treturn this.each(function() {\n\t\t\t\t\t\tvar chart = this.chart;\n\t\n\t\t\t\t\t\t// @todo this should be part of Symbol API\n\t\t\t\t\t\tvar nextSymbolKeys = ['next', 'yes', 'no', 'path1', 'path2', 'path3'];\n\t\n\t\t\t\t\t\tfor (var property in chart.symbols) {\n\t\t\t\t\t\t\tif (chart.symbols.hasOwnProperty(property)) {\n\t\t\t\t\t\t\t\tvar symbol = chart.symbols[property];\n\t\t\t\t\t\t\t\tvar val = symbol.params[param];\n\t\t\t\t\t\t\t\tif (paramFit(val, paramValue)) {\n\t\t\t\t\t\t\t\t\tsymbol.flowstate = newFlowState;\n\t\t\t\t\t\t\t\t\tfor (var nski = 0; nski < nextSymbolKeys.length; nski++) {\n\t\t\t\t\t\t\t\t\t\tvar nextSymbolKey = nextSymbolKeys[nski];\n\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey] &&\n\t\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey]['params'] &&\n\t\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey]['params'][param] &&\n\t\t\t\t\t\t\t\t\t\t\tparamFit(symbol[nextSymbolKey]['params'][param], paramValue)\n\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\tsymbol.lineStyle[symbol[nextSymbolKey]['key']] = {stroke: chart.options()['flowstate'][newFlowState]['fill']};\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tchart.clean();\n\t\t\t\t\t\tchart.drawSVG(this);\n\t\t\t\t\t});\n\t\n\t\t\t\t},\n\t\t\t\tclearFlowState: function () {\n\t\t\t\t\treturn this.each(function() {\n\t\t\t\t\t\tvar chart = this.chart;\n\t\n\t\t\t\t\t\tfor (var property in chart.symbols) {\n\t\t\t\t\t\t\tif (chart.symbols.hasOwnProperty(property)) {\n\t\t\t\t\t\t\t\tvar node = chart.symbols[property];\n\t\t\t\t\t\t\t\tnode.flowstate = '';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tchart.clean();\n\t\t\t\t\t\tchart.drawSVG(this);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t\t$.fn.flowChart = function(methodOrOptions) {\n\t\t\t\tif ( methods[methodOrOptions] ) {\n\t\t\t\t\treturn methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 ));\n\t\t\t\t} else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ) {\n\t\t\t\t\t// Default to \"init\"\n\t\t\t\t\treturn methods.init.apply( this, arguments );\n\t\t\t\t} else {\n\t\t\t\t\t$.error( 'Method ' + methodOrOptions + ' does not exist on jQuery.flowChart' );\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ }),\n/* 16 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ (function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// flowchart.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 741234b9605c2cc42761","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./index.js\n// module id = 0\n// module chunks = 0","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.helpers.js\n// module id = 1\n// module chunks = 0","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n this.lineStyle = (options.lineStyle || {});\n this.key = (options.key || '');\n this.leftLines = [];\n this.rightLines = [];\n this.topLines = [];\n this.bottomLines = [];\n this.params = options.params;\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n \n //ndrqu Add click function with event and options params\n if (options.function) { \n this.text.attr({ 'cursor' : 'pointer' });\n\n this.text.node.addEventListener(\"click\", function(evt) {\n window[options.function](evt,options);\n }, false);\n }\n\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n\n //ndrqu Add click function with event and options params\n if (options.function) { \n symbol.node.addEventListener(\"click\", function(evt) {\n window[options.function](evt,options);\n }, false);\n symbol.attr({ 'cursor' : 'pointer' });\n }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var self = this;\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n if (self.next.symbolType === 'end') return;\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else if (this.next_direction === 'left') {\n\n var leftPoint = this.getLeft();\n\n if (!this.next.isPositioned) {\n this.next.setY(leftPoint.y - this.next.height/2);\n this.next.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n if (self.next.symbolType === 'end') return;\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, this.getAttr('arrow-text') || '', this.next_direction);\n } else {\n this.drawLineTo(this.next, this.getAttr('arrow-text') || '');\n }\n }\n};\n\nSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n if (this.connectedTo.indexOf(symbol) < 0) {\n this.connectedTo.push(symbol);\n }\n\n var x = this.getCenter().x,\n y = this.getCenter().y,\n right = this.getRight(),\n bottom = this.getBottom(),\n top = this.getTop(),\n left = this.getLeft();\n\n var symbolX = symbol.getCenter().x,\n symbolY = symbol.getCenter().y,\n symbolTop = symbol.getTop(),\n symbolRight = symbol.getRight(),\n symbolLeft = symbol.getLeft();\n\n var isOnSameColumn = x === symbolX,\n isOnSameLine = y === symbolY,\n isUnder = y < symbolY,\n isUpper = y > symbolY || this === symbol,\n isLeft = x > symbolX,\n isRight = x < symbolX;\n\n var maxX = 0,\n line,\n yOffset,\n lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n if (symbol.topLines.length === 0 && this.bottomLines.length === 0) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n } else {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n line = drawLine(this.chart, bottom, [\n {x: symbolTop.x, y: symbolTop.y - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n if (symbol.leftLines.length === 0 && this.rightLines.length === 0) {\n line = drawLine(this.chart, right, symbolLeft, text);\n } else {\n yOffset = Math.max(symbol.leftLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x, y: right.y - yOffset},\n {x: right.x, y: symbolLeft.y - yOffset},\n {x: symbolLeft.x, y: symbolLeft.y - yOffset},\n {x: symbolLeft.x, y: symbolLeft.y}\n ], text);\n }\n this.rightLines.push(line);\n symbol.leftLines.push(line);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n if (symbol.rightLines.length === 0 && this.leftLines.length === 0) {\n line = drawLine(this.chart, left, symbolRight, text);\n } else {\n yOffset = Math.max(symbol.rightLines.length, this.leftLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x, y: right.y - yOffset},\n {x: right.x, y: symbolRight.y - yOffset},\n {x: symbolRight.x, y: symbolRight.y - yOffset},\n {x: symbolRight.x, y: symbolRight.y}\n ], text);\n }\n this.leftLines.push(line);\n symbol.rightLines.push(line);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y - yOffset},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightLines.push(line);\n symbol.topLines.push(line);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y - yOffset},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightLines.push(line);\n symbol.topLines.push(line);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2 - yOffset},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n } else {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((!origin || origin === 'bottom') && isRight && isUnder) {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n if (symbolTop.x > maxX) maxX = symbolTop.x;\n } else if ((!origin || origin === 'bottom') && isRight) {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2 - yOffset},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((origin && origin === 'right') && isLeft) {\n yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightLines.push(line);\n symbol.topLines.push(line);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y - yOffset},\n {x: symbolTop.x, y: symbolTop.y - yOffset}\n ], text);\n this.rightLines.push(line);\n symbol.topLines.push(line);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2 - yOffset},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + lineLength/2;\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n var diffX = left.x - lineLength/2;\n if (symbolLeft.x < left.x) {\n diffX = symbolLeft.x - lineLength/2;\n }\n yOffset = Math.max(symbol.topLines.length, this.leftLines.length) * 10;\n line = drawLine(this.chart, left, [\n {x: diffX, y: left.y - yOffset},\n {x: diffX, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftLines.push(line);\n symbol.topLines.push(line);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\n yOffset = Math.max(symbol.topLines.length, this.leftLines.length) * 10;\n line = drawLine(this.chart, left, [\n {x: symbolTop.x + (left.x - symbolTop.x)/2, y: left.y},\n {x: symbolTop.x + (left.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftLines.push(line);\n symbol.topLines.push(line);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'top')) {\n yOffset = Math.max(symbol.topLines.length, this.topLines.length) * 10;\n line = drawLine(this.chart, top, [\n {x: top.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.topLines.push(line);\n symbol.topLines.push(line);\n this.topStart = true;\n symbol.topEnd = true;\n maxX = top.x;\n }\n\n //update line style\n if (this.lineStyle[symbol.key] && line){\n line.attr(this.lineStyle[symbol.key]);\n }\n\n if (line) {\n for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n var otherLine = this.chart.lines[l];\n\n var ePath = otherLine.attr('path'),\n lPath = line.attr('path');\n\n for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n var newPath = [];\n newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\n var line1_from_x = newPath[0][1];\n var line1_from_y = newPath[0][2];\n var line1_to_x = newPath[1][1];\n var line1_to_y = newPath[1][2];\n\n for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n var newLinePath = [];\n newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\n var line2_from_x = newLinePath[0][1];\n var line2_from_y = newLinePath[0][2];\n var line2_to_x = newLinePath[1][1];\n var line2_to_y = newLinePath[1][2];\n\n var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n if (res.onLine1 && res.onLine2) {\n\n var newSegment;\n if (line2_from_y === line2_to_y) {\n if (line2_from_x > line2_to_x) {\n newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n } else {\n if (line2_from_y > line2_to_y) {\n newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n }\n\n lP += 2;\n }\n }\n }\n }\n\n this.chart.lines.push(line);\n if (this.chart.minXFromSymbols === undefined || this.chart.minXFromSymbols > left.x) {\n this.chart.minXFromSymbols = left.x;\n }\n }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.js\n// module id = 2\n// module chunks = 0","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n var textAnchor = 'start';\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n if (from.x > firstTo.x) {\n x -= chart.options['text-margin']/2;\n textAnchor = 'end';\n } else {\n x += chart.options['text-margin']/2;\n }\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n if (from.y > firstTo.y) {\n y -= chart.options['text-margin']*2;\n }\n }\n }\n\n textPath.attr({\n 'text-anchor': textAnchor,\n 'font-size': chart.options['font-size'],\n 'fill': chart.options['font-color'],\n x: x,\n y: y\n });\n\n if (font) textPath.attr({ 'font': font });\n if (fontF) textPath.attr({ 'font-family': fontF });\n if (fontW) textPath.attr({ 'font-weight': fontW });\n }\n\n return line;\n}\n\nfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n var denominator, a, b, numerator1, numerator2, result = {\n x: null,\n y: null,\n onLine1: false,\n onLine2: false\n };\n denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n if (denominator === 0) {\n return result;\n }\n a = line1StartY - line2StartY;\n b = line1StartX - line2StartX;\n numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n a = numerator1 / denominator;\n b = numerator2 / denominator;\n\n // if we cast these lines infinitely in both directions, they intersect here:\n result.x = line1StartX + (a * (line1EndX - line1StartX));\n result.y = line1StartY + (a * (line1EndY - line1StartY));\n /*\n // it is worth noting that this should be the same as:\n x = line2StartX + (b * (line2EndX - line2StartX));\n y = line2StartX + (b * (line2EndY - line2StartY));\n */\n // if line1 is a segment and line2 is infinite, they intersect if:\n if (a > 0 && a < 1) {\n result.onLine1 = true;\n }\n // if line2 is a segment and line1 is infinite, they intersect if:\n if (b > 0 && b < 1) {\n result.onLine2 = true;\n }\n // if line1 and line2 are segments, they intersect if both of the above are true\n return result;\n}\n\nmodule.exports = {\n\tdrawPath: drawPath,\n\tdrawLine: drawLine,\n\tcheckLineIntersection: checkLineIntersection\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.functions.js\n// module id = 3\n// module chunks = 0","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\nvar Parallel = require('./flowchart.symbol.parallel');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s);\n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n case 'parallel':\n dispSymbols[s.key] = new Parallel(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else if (prevDisp instanceof(Parallel)) {\n if (prev.path1 === s) {\n prevDisp.path1(dispSymb);\n }\n if (prev.path2 === s) {\n prevDisp.path2(dispSymb);\n }\n if (prev.path3 === s) {\n prevDisp.path3(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (dispSymb instanceof(Parallel)) {\n if (s.path1) {\n constructChart(s.path1, dispSymb, s);\n }\n if (s.path2) {\n constructChart(s.path2, dispSymb, s);\n }\n if (s.path3) {\n constructChart(s.path3, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n },\n options: function() {\n return this.diagram.options;\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if (prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getStyle(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '{}';\n }\n\n function getSymbValue(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '';\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)];\n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n \n function getAnnotation(s) {\n\tvar startIndex = s.indexOf(\"(\") + 1, endIndex = s.indexOf(\")\");\n\tvar tmp = s.substring(startIndex, endIndex);\n\tif(tmp.indexOf(\",\") > 0) { tmp = tmp.substring(0, tmp.indexOf(\",\")); }\n\tvar tmp_split = tmp.split(\"@\");\n\tif(tmp_split.length > 1)\n\t\treturn startIndex >= 0 && endIndex >= 0 ? tmp_split[1] : \"\";\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0].trim();\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0].replace(/\\(.*\\)/, ''),\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null,\n function: null,\n lineStyle: {},\n params: {}\n };\n\n //parse parameters\n var params = parts[0].match(/\\((.*)\\)/);\n if (params && params.length > 1){\n var entries = params[1].split(',');\n for(var i = 0; i < entries.length; i++) {\n var entry = entries[i].split('=');\n if (entry.length == 2) {\n symbol.params[entry[0]] = entry[1];\n }\n }\n }\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':$') >= 0) {\n sub = symbol.text.split(':$');\n symbol.text = sub.shift();\n symbol.function = sub.join(':$');\n } else if (symbol.symbolType.indexOf(':$') >= 0) {\n sub = symbol.symbolType.split(':$');\n symbol.symbolType = sub.shift();\n symbol.function = sub.join(':$');\n } else if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n var ann = getAnnotation(line);\n if (ann) {\n line = line.replace('@' + ann, ''); \n }\n // flow\n var flowSymbols = line.split('->');\n for (var iS = 0, lenS = flowSymbols.length; iS < lenS; iS++) {\n var flowSymb = flowSymbols[iS];\n var symbVal = getSymbValue(flowSymb);\n\n if (symbVal === 'true' || symbVal === 'false') {\n // map true or false to yes or no respectively\n flowSymb = flowSymb.replace('true', 'yes');\n flowSymb = flowSymb.replace('false', 'no');\n }\n \n var next = getNextPath(flowSymb);\n var realSymb = getSymbol(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (ann) {\n if (realSymb.symbolType === 'condition') {\n if (next === \"yes\" || next === \"true\") {\n realSymb.yes_annotation = ann;\n } else {\n realSymb.no_annotation = ann;\n }\n } else if (realSymb.symbolType === 'parallel') {\n if (next === 'path1') {\n realSymb.path1_annotation = ann;\n } else if (next === 'path2') {\n realSymb.path2_annotation = ann;\n } else if (next === 'path3') {\n realSymb.path3_annotation = ann;\n }\n }\n ann = null;\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (iS + 1 < lenS) {\n var nextSymb = flowSymbols[iS + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n } else if (line.indexOf('@>') >= 0) {\n\n // line style\n var lineStyleSymbols = line.split('@>');\n for (var iSS = 0, lenSS = lineStyleSymbols.length; iSS < lenSS; iSS++) {\n if ((iSS + 1) !== lenSS) {\n var curSymb = getSymbol(lineStyleSymbols[iSS]);\n var nextSymbol = getSymbol(lineStyleSymbols[iSS+1]);\n\n curSymb['lineStyle'][nextSymbol.key] = JSON.parse(getStyle(lineStyleSymbols[iSS + 1]));\n }\n }\n }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.parse.js\n// module id = 4\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.yes_annotation = options.yes_annotation;\n this.no_annotation = options.no_annotation;\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = options.direction_yes;\n this.no_direction = options.direction_no;\n if (!this.no_direction && this.yes_direction === 'right') {\n this.no_direction = 'bottom';\n } else if (!this.yes_direction && this.no_direction === 'bottom') {\n this.yes_direction = 'right'\n }\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n this.symbol = symbol\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n var self = this;\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n if (self.right_symbol.symbolType === 'end') return;\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n \n if (this.left_symbol) {\n var leftPoint = this.getLeft();\n \n if (!this.left_symbol.isPositioned) {\n this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n \n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n \n if (hasSymbolUnder) {\n if (self.left_symbol.symbolType === 'end') return;\n self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n \n this.left_symbol.isPositioned = true;\n \n this.left_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.yes_annotation ? this.yes_annotation : this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.no_annotation ? this.no_annotation : this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.condition.js\n// module id = 5\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Parallel(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n this.path1_annotation = options.path1_annotation || '';\n this.path2_annotation = options.path2_annotation || '';\n this.path3_annotation = options.path3_annotation || '';\n this.textMargin = this.getAttr('text-margin');\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'top';\n this.params = options.params;\n if (options.direction_next === 'path1' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n if (options.direction_next === 'path2' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n if (options.direction_next === 'path3' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n\n if (options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3) {\n if (options.direction_path1 === 'right') {\n this.path2_direction = 'bottom';\n this.path1_direction = 'right';\n this.path3_direction = 'top';\n } else if (options.direction_path1 === 'top') {\n this.path2_direction = 'right';\n this.path1_direction = 'top';\n this.path3_direction = 'bottom';\n } else if (options.direction_path1 === 'left') {\n this.path2_direction = 'right';\n this.path1_direction = 'left';\n this.path3_direction = 'bottom';\n } else {\n this.path2_direction = 'right';\n this.path1_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else if (options.path1 && !options.direction_path1 && options.path2 && options.direction_path2 && options.path3 && !options.direction_path3) {\n if (options.direction_path2 === 'right') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'top';\n } else if (options.direction_path2 === 'left') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'left';\n this.path3_direction = 'right';\n } else {\n this.path1_direction = 'right';\n this.path2_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else if (options.path1 && !options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && options.direction_path3) {\n if (options.direction_path2 === 'right') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'top';\n this.path3_direction = 'right';\n } else if (options.direction_path2 === 'left') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'left';\n } else {\n this.path1_direction = 'right';\n this.path2_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else {\n this.path1_direction = options.direction_path1;\n this.path2_direction = options.direction_path2;\n this.path3_direction = options.direction_path3;\n }\n\n this.path1_direction = this.path1_direction || 'bottom';\n this.path2_direction = this.path2_direction || 'right';\n this.path3_direction = this.path3_direction || 'top';\n\n this.initialize();\n}\ninherits(Parallel, Symbol);\n\nParallel.prototype.render = function() {\n if (this.path1_direction) {\n this[this.path1_direction + '_symbol'] = this.path1_symbol;\n }\n\n if (this.path2_direction) {\n this[this.path2_direction + '_symbol'] = this.path2_symbol;\n }\n\n if (this.path3_direction) {\n this[this.path3_direction + '_symbol'] = this.path3_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.top_symbol) {\n var topPoint = this.getTop();\n\n if (!this.top_symbol.isPositioned) {\n this.top_symbol.shiftY(this.getY() - this.top_symbol.height - lineLength);\n this.top_symbol.setX(topPoint.x + this.top_symbol.width);\n this.top_symbol.isPositioned = true;\n\n this.top_symbol.render();\n }\n }\n\n var self = this;\n\n if (this.left_symbol) {\n var leftPoint = this.getLeft();\n\n if (!this.left_symbol.isPositioned) {\n this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n if (self.left_symbol.symbolType === 'end') return;\n self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.left_symbol.isPositioned = true;\n\n this.left_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n if (self.right_symbol.symbolType === 'end') return;\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nParallel.prototype.renderLines = function() {\n if (this.path1_symbol) {\n this.drawLineTo(this.path1_symbol, this.path1_annotation, this.path1_direction);\n }\n\n if (this.path2_symbol) {\n this.drawLineTo(this.path2_symbol, this.path2_annotation, this.path2_direction);\n }\n\n if (this.path3_symbol) {\n this.drawLineTo(this.path3_symbol, this.path3_annotation, this.path3_direction);\n }\n};\n\nmodule.exports = Parallel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.parallel.js\n// module id = 6\n// module chunks = 0","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\nvar Parallel = require('./flowchart.symbol.parallel');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if (symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else if (symbol instanceof(Parallel)) {\n symbol.path1 = function(nextSymbol) {\n symbol.path1_symbol = nextSymbol;\n if (symbol.path2_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.path2 = function(nextSymbol) {\n symbol.path2_symbol = nextSymbol;\n if (symbol.path3_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.path3 = function(nextSymbol) {\n symbol.path3_symbol = nextSymbol;\n if (symbol.path1_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n minX = 0,\n minY = 0,\n symbol,\n line;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n var x;\n var y;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n var leftX = symbol.getX()\n x = leftX + symbol.width;\n y = symbol.getY() + symbol.height;\n if (leftX < minX) {\n minX = leftX;\n }\n if (x > maxX) {\n maxX = x;\n }\n if (y > maxY) {\n maxY = y;\n }\n }\n\n for (i = 0, len = this.lines.length; i < len; i++) {\n line = this.lines[i].getBBox();\n x = line.x;\n y = line.y;\n var x2 = line.x2;\n var y2 = line.y2;\n if (x < minX) {\n minX = x;\n }\n if (y < minY) {\n minY = y;\n }\n if (x2 > maxX) {\n maxX = x2;\n }\n if (y2 > maxY) {\n maxY = y2;\n }\n }\n\n var scale = this.options['scale'];\n var lineWidth = this.options['line-width'];\n\n if (this.minXFromSymbols < minX) minX = this.minXFromSymbols;\n\n if (minX < 0) minX -= lineWidth;\n if (minY < 0) minY -= lineWidth;\n\n var width = maxX + lineWidth - minX;\n var height = maxY + lineWidth - minY;\n\n this.paper.setSize(width * scale, height * scale);\n this.paper.setViewBox(minX, minY, width, height, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode && paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.chart.js\n// module id = 7\n// module chunks = 0","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {},\n 'parallel': {}\n } //,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.defaults.js\n// module id = 8\n// module chunks = 0","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.shim.js\n// module id = 9\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.end.js\n// module id = 10\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n this.symbol = symbol\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.inputoutput.js\n// module id = 11\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.operation.js\n// module id = 12\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.start.js\n// module id = 13\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.subroutine.js\n// module id = 14\n// module chunks = 0","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\n\t(function( $ ) {\n\t\tfunction paramFit(needle, haystack) {\n\t\t\treturn needle == haystack ||\n\t\t\t( Array.isArray(haystack) && (haystack.includes(needle) || haystack.includes(Number(needle)) ))\n\t\t}\n\t\tvar methods = {\n\t\t\tinit : function(options) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tthis.chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tthis.chart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t},\n\t\t\tsetFlowStateByParam : function(param, paramValue, newFlowState) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar chart = this.chart;\n\n\t\t\t\t\t// @todo this should be part of Symbol API\n\t\t\t\t\tvar nextSymbolKeys = ['next', 'yes', 'no', 'path1', 'path2', 'path3'];\n\n\t\t\t\t\tfor (var property in chart.symbols) {\n\t\t\t\t\t\tif (chart.symbols.hasOwnProperty(property)) {\n\t\t\t\t\t\t\tvar symbol = chart.symbols[property];\n\t\t\t\t\t\t\tvar val = symbol.params[param];\n\t\t\t\t\t\t\tif (paramFit(val, paramValue)) {\n\t\t\t\t\t\t\t\tsymbol.flowstate = newFlowState;\n\t\t\t\t\t\t\t\tfor (var nski = 0; nski < nextSymbolKeys.length; nski++) {\n\t\t\t\t\t\t\t\t\tvar nextSymbolKey = nextSymbolKeys[nski];\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey] &&\n\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey]['params'] &&\n\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey]['params'][param] &&\n\t\t\t\t\t\t\t\t\t\tparamFit(symbol[nextSymbolKey]['params'][param], paramValue)\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tsymbol.lineStyle[symbol[nextSymbolKey]['key']] = {stroke: chart.options()['flowstate'][newFlowState]['fill']};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tchart.clean();\n\t\t\t\t\tchart.drawSVG(this);\n\t\t\t\t});\n\n\t\t\t},\n\t\t\tclearFlowState: function () {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar chart = this.chart;\n\n\t\t\t\t\tfor (var property in chart.symbols) {\n\t\t\t\t\t\tif (chart.symbols.hasOwnProperty(property)) {\n\t\t\t\t\t\t\tvar node = chart.symbols[property];\n\t\t\t\t\t\t\tnode.flowstate = '';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tchart.clean();\n\t\t\t\t\tchart.drawSVG(this);\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\t$.fn.flowChart = function(methodOrOptions) {\n\t\t\tif ( methods[methodOrOptions] ) {\n\t\t\t\treturn methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 ));\n\t\t\t} else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ) {\n\t\t\t\t// Default to \"init\"\n\t\t\t\treturn methods.init.apply( this, arguments );\n\t\t\t} else {\n\t\t\t\t$.error( 'Method ' + methodOrOptions + ' does not exist on jQuery.flowChart' );\n\t\t\t}\n\t\t};\n\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/jquery-plugin.js\n// module id = 15\n// module chunks = 0","module.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"Raphael\"\n// module id = 16\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.js","webpack:///webpack/bootstrap 447a64fc8584010fb6f0","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.symbol.parallel.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_16__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","lineStyle","key","leftLines","rightLines","topLines","bottomLines","params","next_direction","next","undefined","text","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","function","cursor","addEventListener","evt","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","self","lineLength","rightPoint","isPositioned","shift","symb","hasSymbolUnder","len","diff","Math","abs","leftPoint","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","yOffset","right","bottom","top","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","max","rightStart","topEnd","bottomStart","diffX","leftStart","topStart","leftEnd","rightEnd","l","llen","lines","otherLine","ePath","lPath","iP","lenP","newPath","line1_from_x","line1_from_y","line1_to_x","line1_to_y","lP","lenlP","newLinePath","line2_from_x","line2_from_y","line2_to_x","line2_to_y","res","onLine1","onLine2","newSegment","splice","minXFromSymbols","maxXFromLine","drawPath","location","points","path","pathValues","from","to","toString","arrow-end","centerText","textPath","textAnchor","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getStyle","s","startIndex","endIndex","getSymbValue","getSymbol","getNextPath","flowSymb","getAnnotation","tmp","tmp_split","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Parallel","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","path1","path2","path3","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","parts","match","entries","entry","sub","join","txtAndState","pop","ann","flowSymbols","iS","lenS","symbVal","realSymb","direction","condOpt","yes_annotation","no_annotation","path1_annotation","path2_annotation","path3_annotation","nextSymb","lineStyleSymbols","iSS","lenSS","curSymb","nextSymbol","JSON","textMargin","yes_direction","direction_yes","no_direction","direction_no","startX","startY","yes_symbol","no_symbol","bottom_symbol","right_symbol","left_symbol","rect","path1_direction","path2_direction","path3_direction","direction_next","direction_path1","direction_path2","direction_path3","path1_symbol","path2_symbol","path3_symbol","top_symbol","topPoint","Raphael","handle","flowChart","maxHeight","maxY","minX","minY","leftX","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","roundness","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","parallel","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","innerWrap","jQuery","$","paramFit","needle","haystack","isArray","includes","methods","init","each","$this","html","setFlowStateByParam","param","paramValue","newFlowState","nextSymbolKeys","property","hasOwnProperty","val","nski","nextSymbolKey","clearFlowState","fn","methodOrOptions","apply","slice","error"],"mappings":"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","file":"flowchart.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_16__) {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_16__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 9);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 15);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ }),\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ (function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ }),\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t this.lineStyle = (options.lineStyle || {});\n\t this.key = (options.key || '');\n\t this.leftLines = [];\n\t this.rightLines = [];\n\t this.topLines = [];\n\t this.bottomLines = [];\n\t this.params = options.params;\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t \n\t //ndrqu Add click function with event and options params\n\t if (options.function) { \n\t this.text.attr({ 'cursor' : 'pointer' });\n\t\n\t this.text.node.addEventListener(\"click\", function(evt) {\n\t window[options.function](evt,options);\n\t }, false);\n\t }\n\t\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t symbol.node.setAttribute('ry', this.getAttr('roundness'));\n\t symbol.node.setAttribute('rx', this.getAttr('roundness'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t\n\t //ndrqu Add click function with event and options params\n\t if (options.function) { \n\t symbol.node.addEventListener(\"click\", function(evt) {\n\t window[options.function](evt,options);\n\t }, false);\n\t symbol.attr({ 'cursor' : 'pointer' });\n\t }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var self = this;\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.next.symbolType === 'end') return;\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else if (this.next_direction === 'left') {\n\t\n\t var leftPoint = this.getLeft();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.setY(leftPoint.y - this.next.height/2);\n\t this.next.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.next.symbolType === 'end') return;\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, this.getAttr('arrow-text') || '', this.next_direction);\n\t } else {\n\t this.drawLineTo(this.next, this.getAttr('arrow-text') || '');\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n\t if (this.connectedTo.indexOf(symbol) < 0) {\n\t this.connectedTo.push(symbol);\n\t }\n\t\n\t var x = this.getCenter().x,\n\t y = this.getCenter().y,\n\t right = this.getRight(),\n\t bottom = this.getBottom(),\n\t top = this.getTop(),\n\t left = this.getLeft();\n\t\n\t var symbolX = symbol.getCenter().x,\n\t symbolY = symbol.getCenter().y,\n\t symbolTop = symbol.getTop(),\n\t symbolRight = symbol.getRight(),\n\t symbolLeft = symbol.getLeft();\n\t\n\t var isOnSameColumn = x === symbolX,\n\t isOnSameLine = y === symbolY,\n\t isUnder = y < symbolY,\n\t isUpper = y > symbolY || this === symbol,\n\t isLeft = x > symbolX,\n\t isRight = x < symbolX;\n\t\n\t var maxX = 0,\n\t line,\n\t yOffset,\n\t lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t if (symbol.topLines.length === 0 && this.bottomLines.length === 0) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\n\t } else {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t line = drawLine(this.chart, bottom, [\n\t {x: symbolTop.x, y: symbolTop.y - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n\t if (symbol.leftLines.length === 0 && this.rightLines.length === 0) {\n\t line = drawLine(this.chart, right, symbolLeft, text);\n\t } else {\n\t yOffset = Math.max(symbol.leftLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x, y: right.y - yOffset},\n\t {x: right.x, y: symbolLeft.y - yOffset},\n\t {x: symbolLeft.x, y: symbolLeft.y - yOffset},\n\t {x: symbolLeft.x, y: symbolLeft.y}\n\t ], text);\n\t }\n\t this.rightLines.push(line);\n\t symbol.leftLines.push(line);\n\t this.rightStart = true;\n\t symbol.leftEnd = true;\n\t maxX = symbolLeft.x;\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n\t if (symbol.rightLines.length === 0 && this.leftLines.length === 0) {\n\t line = drawLine(this.chart, left, symbolRight, text);\n\t } else {\n\t yOffset = Math.max(symbol.rightLines.length, this.leftLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x, y: right.y - yOffset},\n\t {x: right.x, y: symbolRight.y - yOffset},\n\t {x: symbolRight.x, y: symbolRight.y - yOffset},\n\t {x: symbolRight.x, y: symbolRight.y}\n\t ], text);\n\t }\n\t this.leftLines.push(line);\n\t symbol.rightLines.push(line);\n\t this.leftStart = true;\n\t symbol.rightEnd = true;\n\t maxX = symbolRight.x;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n\t yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y - yOffset},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightLines.push(line);\n\t symbol.topLines.push(line);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n\t yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y - yOffset},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightLines.push(line);\n\t symbol.topLines.push(line);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2 - yOffset},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t } else {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((!origin || origin === 'bottom') && isRight && isUnder) {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t if (symbolTop.x > maxX) maxX = symbolTop.x;\n\t } else if ((!origin || origin === 'bottom') && isRight) {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2 - yOffset},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((origin && origin === 'right') && isLeft) {\n\t yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightLines.push(line);\n\t symbol.topLines.push(line);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'right') && isRight) {\n\t yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - yOffset}\n\t ], text);\n\t this.rightLines.push(line);\n\t symbol.topLines.push(line);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2 - yOffset},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + lineLength/2;\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n\t var diffX = left.x - lineLength/2;\n\t if (symbolLeft.x < left.x) {\n\t diffX = symbolLeft.x - lineLength/2;\n\t }\n\t yOffset = Math.max(symbol.topLines.length, this.leftLines.length) * 10;\n\t line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y - yOffset},\n\t {x: diffX, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftLines.push(line);\n\t symbol.topLines.push(line);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\n\t yOffset = Math.max(symbol.topLines.length, this.leftLines.length) * 10;\n\t line = drawLine(this.chart, left, [\n\t {x: symbolTop.x + (left.x - symbolTop.x)/2, y: left.y},\n\t {x: symbolTop.x + (left.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftLines.push(line);\n\t symbol.topLines.push(line);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'top')) {\n\t yOffset = Math.max(symbol.topLines.length, this.topLines.length) * 10;\n\t line = drawLine(this.chart, top, [\n\t {x: top.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.topLines.push(line);\n\t symbol.topLines.push(line);\n\t this.topStart = true;\n\t symbol.topEnd = true;\n\t maxX = top.x;\n\t }\n\t\n\t //update line style\n\t if (this.lineStyle[symbol.key] && line){\n\t line.attr(this.lineStyle[symbol.key]);\n\t }\n\t\n\t if (line) {\n\t for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n\t var otherLine = this.chart.lines[l];\n\t\n\t var ePath = otherLine.attr('path'),\n\t lPath = line.attr('path');\n\t\n\t for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n\t var newPath = [];\n\t newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n\t newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\t\n\t var line1_from_x = newPath[0][1];\n\t var line1_from_y = newPath[0][2];\n\t var line1_to_x = newPath[1][1];\n\t var line1_to_y = newPath[1][2];\n\t\n\t for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n\t var newLinePath = [];\n\t newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n\t newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\t\n\t var line2_from_x = newLinePath[0][1];\n\t var line2_from_y = newLinePath[0][2];\n\t var line2_to_x = newLinePath[1][1];\n\t var line2_to_y = newLinePath[1][2];\n\t\n\t var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n\t if (res.onLine1 && res.onLine2) {\n\t\n\t var newSegment;\n\t if (line2_from_y === line2_to_y) {\n\t if (line2_from_x > line2_to_x) {\n\t newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t } else {\n\t if (line2_from_y > line2_to_y) {\n\t newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t }\n\t\n\t lP += 2;\n\t }\n\t }\n\t }\n\t }\n\t\n\t this.chart.lines.push(line);\n\t if (this.chart.minXFromSymbols === undefined || this.chart.minXFromSymbols > left.x) {\n\t this.chart.minXFromSymbols = left.x;\n\t }\n\t }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ }),\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ (function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t var textAnchor = 'start';\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t if (from.x > firstTo.x) {\n\t x -= chart.options['text-margin']/2;\n\t textAnchor = 'end';\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t }\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t if (from.y > firstTo.y) {\n\t y -= chart.options['text-margin']*2;\n\t }\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': textAnchor,\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ }),\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 7);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 13);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 10);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 12);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 11);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 14);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\tvar Parallel = __webpack_require__(/*! ./flowchart.symbol.parallel */ 6);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s);\n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t case 'parallel':\n\t dispSymbols[s.key] = new Parallel(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else if (prevDisp instanceof(Parallel)) {\n\t if (prev.path1 === s) {\n\t prevDisp.path1(dispSymb);\n\t }\n\t if (prev.path2 === s) {\n\t prevDisp.path2(dispSymb);\n\t }\n\t if (prev.path3 === s) {\n\t prevDisp.path3(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (dispSymb instanceof(Parallel)) {\n\t if (s.path1) {\n\t constructChart(s.path1, dispSymb, s);\n\t }\n\t if (s.path2) {\n\t constructChart(s.path2, dispSymb, s);\n\t }\n\t if (s.path3) {\n\t constructChart(s.path3, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t },\n\t options: function() {\n\t return this.diagram.options;\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if (prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getStyle(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '{}';\n\t }\n\t\n\t function getSymbValue(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '';\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)];\n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t \n\t function getAnnotation(s) {\n\t\tvar startIndex = s.indexOf(\"(\") + 1, endIndex = s.indexOf(\")\");\n\t\tvar tmp = s.substring(startIndex, endIndex);\n\t\tif(tmp.indexOf(\",\") > 0) { tmp = tmp.substring(0, tmp.indexOf(\",\")); }\n\t\tvar tmp_split = tmp.split(\"@\");\n\t\tif(tmp_split.length > 1)\n\t\t\treturn startIndex >= 0 && endIndex >= 0 ? tmp_split[1] : \"\";\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0].trim();\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0].replace(/\\(.*\\)/, ''),\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null,\n\t function: null,\n\t lineStyle: {},\n\t params: {}\n\t };\n\t\n\t //parse parameters\n\t var params = parts[0].match(/\\((.*)\\)/);\n\t if (params && params.length > 1){\n\t var entries = params[1].split(',');\n\t for(var i = 0; i < entries.length; i++) {\n\t var entry = entries[i].split('=');\n\t if (entry.length == 2) {\n\t symbol.params[entry[0]] = entry[1];\n\t }\n\t }\n\t }\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':$') >= 0) {\n\t sub = symbol.text.split(':$');\n\t symbol.text = sub.shift();\n\t symbol.function = sub.join(':$');\n\t } else if (symbol.symbolType.indexOf(':$') >= 0) {\n\t sub = symbol.symbolType.split(':$');\n\t symbol.symbolType = sub.shift();\n\t symbol.function = sub.join(':$');\n\t } else if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t var ann = getAnnotation(line);\n\t if (ann) {\n\t line = line.replace('@' + ann, ''); \n\t }\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var iS = 0, lenS = flowSymbols.length; iS < lenS; iS++) {\n\t var flowSymb = flowSymbols[iS];\n\t var symbVal = getSymbValue(flowSymb);\n\t\n\t if (symbVal === 'true' || symbVal === 'false') {\n\t // map true or false to yes or no respectively\n\t flowSymb = flowSymb.replace('true', 'yes');\n\t flowSymb = flowSymb.replace('false', 'no');\n\t }\n\t \n\t var next = getNextPath(flowSymb);\n\t var realSymb = getSymbol(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (ann) {\n\t if (realSymb.symbolType === 'condition') {\n\t if (next === \"yes\" || next === \"true\") {\n\t realSymb.yes_annotation = ann;\n\t } else {\n\t realSymb.no_annotation = ann;\n\t }\n\t } else if (realSymb.symbolType === 'parallel') {\n\t if (next === 'path1') {\n\t realSymb.path1_annotation = ann;\n\t } else if (next === 'path2') {\n\t realSymb.path2_annotation = ann;\n\t } else if (next === 'path3') {\n\t realSymb.path3_annotation = ann;\n\t }\n\t }\n\t ann = null;\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (iS + 1 < lenS) {\n\t var nextSymb = flowSymbols[iS + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t } else if (line.indexOf('@>') >= 0) {\n\t\n\t // line style\n\t var lineStyleSymbols = line.split('@>');\n\t for (var iSS = 0, lenSS = lineStyleSymbols.length; iSS < lenSS; iSS++) {\n\t if ((iSS + 1) !== lenSS) {\n\t var curSymb = getSymbol(lineStyleSymbols[iSS]);\n\t var nextSymbol = getSymbol(lineStyleSymbols[iSS+1]);\n\t\n\t curSymb['lineStyle'][nextSymbol.key] = JSON.parse(getStyle(lineStyleSymbols[iSS + 1]));\n\t }\n\t }\n\t }\n\t\n\t }\n\t return chart;\n\t}\n\t\n\tmodule.exports = parse;\n\n\n/***/ }),\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction Condition(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.yes_annotation = options.yes_annotation;\n\t this.no_annotation = options.no_annotation;\n\t this.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = options.direction_yes;\n\t this.no_direction = options.direction_no;\n\t if (!this.no_direction && this.yes_direction === 'right') {\n\t this.no_direction = 'bottom';\n\t } else if (!this.yes_direction && this.no_direction === 'bottom') {\n\t this.yes_direction = 'right'\n\t }\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t this.symbol = symbol\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t var self = this;\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.right_symbol.symbolType === 'end') return;\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t \n\t if (this.left_symbol) {\n\t var leftPoint = this.getLeft();\n\t \n\t if (!this.left_symbol.isPositioned) {\n\t this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n\t this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t \n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t \n\t if (hasSymbolUnder) {\n\t if (self.left_symbol.symbolType === 'end') return;\n\t self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t \n\t this.left_symbol.isPositioned = true;\n\t \n\t this.left_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.yes_annotation ? this.yes_annotation : this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.no_annotation ? this.no_annotation : this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ }),\n/* 6 */\n/*!******************************************!*\\\n !*** ./src/flowchart.symbol.parallel.js ***!\n \\******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Parallel(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t this.path1_annotation = options.path1_annotation || '';\n\t this.path2_annotation = options.path2_annotation || '';\n\t this.path3_annotation = options.path3_annotation || '';\n\t this.textMargin = this.getAttr('text-margin');\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t this.params = options.params;\n\t if (options.direction_next === 'path1' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path2' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path3' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t\n\t if (options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path1 === 'right') {\n\t this.path2_direction = 'bottom';\n\t this.path1_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path1 === 'top') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'top';\n\t this.path3_direction = 'bottom';\n\t } else if (options.direction_path1 === 'left') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'left';\n\t this.path3_direction = 'bottom';\n\t } else {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'left';\n\t this.path3_direction = 'right';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'top';\n\t this.path3_direction = 'right';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'left';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else {\n\t this.path1_direction = options.direction_path1;\n\t this.path2_direction = options.direction_path2;\n\t this.path3_direction = options.direction_path3;\n\t }\n\t\n\t this.path1_direction = this.path1_direction || 'bottom';\n\t this.path2_direction = this.path2_direction || 'right';\n\t this.path3_direction = this.path3_direction || 'top';\n\t\n\t this.initialize();\n\t}\n\tinherits(Parallel, Symbol);\n\t\n\tParallel.prototype.render = function() {\n\t if (this.path1_direction) {\n\t this[this.path1_direction + '_symbol'] = this.path1_symbol;\n\t }\n\t\n\t if (this.path2_direction) {\n\t this[this.path2_direction + '_symbol'] = this.path2_symbol;\n\t }\n\t\n\t if (this.path3_direction) {\n\t this[this.path3_direction + '_symbol'] = this.path3_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.top_symbol) {\n\t var topPoint = this.getTop();\n\t\n\t if (!this.top_symbol.isPositioned) {\n\t this.top_symbol.shiftY(this.getY() - this.top_symbol.height - lineLength);\n\t this.top_symbol.setX(topPoint.x + this.top_symbol.width);\n\t this.top_symbol.isPositioned = true;\n\t\n\t this.top_symbol.render();\n\t }\n\t }\n\t\n\t var self = this;\n\t\n\t if (this.left_symbol) {\n\t var leftPoint = this.getLeft();\n\t\n\t if (!this.left_symbol.isPositioned) {\n\t this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n\t this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.left_symbol.symbolType === 'end') return;\n\t self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.left_symbol.isPositioned = true;\n\t\n\t this.left_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.right_symbol.symbolType === 'end') return;\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tParallel.prototype.renderLines = function() {\n\t if (this.path1_symbol) {\n\t this.drawLineTo(this.path1_symbol, this.path1_annotation, this.path1_direction);\n\t }\n\t\n\t if (this.path2_symbol) {\n\t this.drawLineTo(this.path2_symbol, this.path2_annotation, this.path2_direction);\n\t }\n\t\n\t if (this.path3_symbol) {\n\t this.drawLineTo(this.path3_symbol, this.path3_annotation, this.path3_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Parallel;\n\n/***/ }),\n/* 7 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 16);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 8);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\tvar Parallel = __webpack_require__(/*! ./flowchart.symbol.parallel */ 6);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if (symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else if (symbol instanceof(Parallel)) {\n\t symbol.path1 = function(nextSymbol) {\n\t symbol.path1_symbol = nextSymbol;\n\t if (symbol.path2_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.path2 = function(nextSymbol) {\n\t symbol.path2_symbol = nextSymbol;\n\t if (symbol.path3_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.path3 = function(nextSymbol) {\n\t symbol.path3_symbol = nextSymbol;\n\t if (symbol.path1_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t minX = 0,\n\t minY = 0,\n\t symbol,\n\t line;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t var x;\n\t var y;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t var leftX = symbol.getX()\n\t x = leftX + symbol.width;\n\t y = symbol.getY() + symbol.height;\n\t if (leftX < minX) {\n\t minX = leftX;\n\t }\n\t if (x > maxX) {\n\t maxX = x;\n\t }\n\t if (y > maxY) {\n\t maxY = y;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.lines.length; i < len; i++) {\n\t line = this.lines[i].getBBox();\n\t x = line.x;\n\t y = line.y;\n\t var x2 = line.x2;\n\t var y2 = line.y2;\n\t if (x < minX) {\n\t minX = x;\n\t }\n\t if (y < minY) {\n\t minY = y;\n\t }\n\t if (x2 > maxX) {\n\t maxX = x2;\n\t }\n\t if (y2 > maxY) {\n\t maxY = y2;\n\t }\n\t }\n\t\n\t var scale = this.options['scale'];\n\t var lineWidth = this.options['line-width'];\n\t\n\t if (this.minXFromSymbols < minX) minX = this.minXFromSymbols;\n\t\n\t if (minX < 0) minX -= lineWidth;\n\t if (minY < 0) minY -= lineWidth;\n\t\n\t var width = maxX + lineWidth - minX;\n\t var height = maxY + lineWidth - minY;\n\t\n\t this.paper.setSize(width * scale, height * scale);\n\t this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode && paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n/***/ }),\n/* 8 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ (function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'roundness': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {},\n\t 'parallel': {}\n\t } //,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n/***/ }),\n/* 9 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ (function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ }),\n/* 10 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ }),\n/* 11 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t this.symbol = symbol\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ }),\n/* 12 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ }),\n/* 13 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ }),\n/* 14 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ }),\n/* 15 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\n\t\t(function( $ ) {\n\t\t\tfunction paramFit(needle, haystack) {\n\t\t\t\treturn needle == haystack ||\n\t\t\t\t( Array.isArray(haystack) && (haystack.includes(needle) || haystack.includes(Number(needle)) ))\n\t\t\t}\n\t\t\tvar methods = {\n\t\t\t\tinit : function(options) {\n\t\t\t\t\treturn this.each(function() {\n\t\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\t\tthis.chart = parse($this.text());\n\t\t\t\t\t\t$this.html('');\n\t\t\t\t\t\tthis.chart.drawSVG(this, options);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tsetFlowStateByParam : function(param, paramValue, newFlowState) {\n\t\t\t\t\treturn this.each(function() {\n\t\t\t\t\t\tvar chart = this.chart;\n\t\n\t\t\t\t\t\t// @todo this should be part of Symbol API\n\t\t\t\t\t\tvar nextSymbolKeys = ['next', 'yes', 'no', 'path1', 'path2', 'path3'];\n\t\n\t\t\t\t\t\tfor (var property in chart.symbols) {\n\t\t\t\t\t\t\tif (chart.symbols.hasOwnProperty(property)) {\n\t\t\t\t\t\t\t\tvar symbol = chart.symbols[property];\n\t\t\t\t\t\t\t\tvar val = symbol.params[param];\n\t\t\t\t\t\t\t\tif (paramFit(val, paramValue)) {\n\t\t\t\t\t\t\t\t\tsymbol.flowstate = newFlowState;\n\t\t\t\t\t\t\t\t\tfor (var nski = 0; nski < nextSymbolKeys.length; nski++) {\n\t\t\t\t\t\t\t\t\t\tvar nextSymbolKey = nextSymbolKeys[nski];\n\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey] &&\n\t\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey]['params'] &&\n\t\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey]['params'][param] &&\n\t\t\t\t\t\t\t\t\t\t\tparamFit(symbol[nextSymbolKey]['params'][param], paramValue)\n\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\tsymbol.lineStyle[symbol[nextSymbolKey]['key']] = {stroke: chart.options()['flowstate'][newFlowState]['fill']};\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tchart.clean();\n\t\t\t\t\t\tchart.drawSVG(this);\n\t\t\t\t\t});\n\t\n\t\t\t\t},\n\t\t\t\tclearFlowState: function () {\n\t\t\t\t\treturn this.each(function() {\n\t\t\t\t\t\tvar chart = this.chart;\n\t\n\t\t\t\t\t\tfor (var property in chart.symbols) {\n\t\t\t\t\t\t\tif (chart.symbols.hasOwnProperty(property)) {\n\t\t\t\t\t\t\t\tvar node = chart.symbols[property];\n\t\t\t\t\t\t\t\tnode.flowstate = '';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tchart.clean();\n\t\t\t\t\t\tchart.drawSVG(this);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t\t$.fn.flowChart = function(methodOrOptions) {\n\t\t\t\tif ( methods[methodOrOptions] ) {\n\t\t\t\t\treturn methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 ));\n\t\t\t\t} else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ) {\n\t\t\t\t\t// Default to \"init\"\n\t\t\t\t\treturn methods.init.apply( this, arguments );\n\t\t\t\t} else {\n\t\t\t\t\t$.error( 'Method ' + methodOrOptions + ' does not exist on jQuery.flowChart' );\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ }),\n/* 16 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ (function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// flowchart.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 447a64fc8584010fb6f0","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./index.js\n// module id = 0\n// module chunks = 0","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.helpers.js\n// module id = 1\n// module chunks = 0","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n this.lineStyle = (options.lineStyle || {});\n this.key = (options.key || '');\n this.leftLines = [];\n this.rightLines = [];\n this.topLines = [];\n this.bottomLines = [];\n this.params = options.params;\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n \n //ndrqu Add click function with event and options params\n if (options.function) { \n this.text.attr({ 'cursor' : 'pointer' });\n\n this.text.node.addEventListener(\"click\", function(evt) {\n window[options.function](evt,options);\n }, false);\n }\n\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n symbol.node.setAttribute('ry', this.getAttr('roundness'));\n symbol.node.setAttribute('rx', this.getAttr('roundness'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n\n //ndrqu Add click function with event and options params\n if (options.function) { \n symbol.node.addEventListener(\"click\", function(evt) {\n window[options.function](evt,options);\n }, false);\n symbol.attr({ 'cursor' : 'pointer' });\n }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var self = this;\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n if (self.next.symbolType === 'end') return;\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else if (this.next_direction === 'left') {\n\n var leftPoint = this.getLeft();\n\n if (!this.next.isPositioned) {\n this.next.setY(leftPoint.y - this.next.height/2);\n this.next.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n if (self.next.symbolType === 'end') return;\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, this.getAttr('arrow-text') || '', this.next_direction);\n } else {\n this.drawLineTo(this.next, this.getAttr('arrow-text') || '');\n }\n }\n};\n\nSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n if (this.connectedTo.indexOf(symbol) < 0) {\n this.connectedTo.push(symbol);\n }\n\n var x = this.getCenter().x,\n y = this.getCenter().y,\n right = this.getRight(),\n bottom = this.getBottom(),\n top = this.getTop(),\n left = this.getLeft();\n\n var symbolX = symbol.getCenter().x,\n symbolY = symbol.getCenter().y,\n symbolTop = symbol.getTop(),\n symbolRight = symbol.getRight(),\n symbolLeft = symbol.getLeft();\n\n var isOnSameColumn = x === symbolX,\n isOnSameLine = y === symbolY,\n isUnder = y < symbolY,\n isUpper = y > symbolY || this === symbol,\n isLeft = x > symbolX,\n isRight = x < symbolX;\n\n var maxX = 0,\n line,\n yOffset,\n lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n if (symbol.topLines.length === 0 && this.bottomLines.length === 0) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n } else {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n line = drawLine(this.chart, bottom, [\n {x: symbolTop.x, y: symbolTop.y - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n if (symbol.leftLines.length === 0 && this.rightLines.length === 0) {\n line = drawLine(this.chart, right, symbolLeft, text);\n } else {\n yOffset = Math.max(symbol.leftLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x, y: right.y - yOffset},\n {x: right.x, y: symbolLeft.y - yOffset},\n {x: symbolLeft.x, y: symbolLeft.y - yOffset},\n {x: symbolLeft.x, y: symbolLeft.y}\n ], text);\n }\n this.rightLines.push(line);\n symbol.leftLines.push(line);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n if (symbol.rightLines.length === 0 && this.leftLines.length === 0) {\n line = drawLine(this.chart, left, symbolRight, text);\n } else {\n yOffset = Math.max(symbol.rightLines.length, this.leftLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x, y: right.y - yOffset},\n {x: right.x, y: symbolRight.y - yOffset},\n {x: symbolRight.x, y: symbolRight.y - yOffset},\n {x: symbolRight.x, y: symbolRight.y}\n ], text);\n }\n this.leftLines.push(line);\n symbol.rightLines.push(line);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y - yOffset},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightLines.push(line);\n symbol.topLines.push(line);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y - yOffset},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightLines.push(line);\n symbol.topLines.push(line);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2 - yOffset},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n } else {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((!origin || origin === 'bottom') && isRight && isUnder) {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n if (symbolTop.x > maxX) maxX = symbolTop.x;\n } else if ((!origin || origin === 'bottom') && isRight) {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2 - yOffset},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((origin && origin === 'right') && isLeft) {\n yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightLines.push(line);\n symbol.topLines.push(line);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y - yOffset},\n {x: symbolTop.x, y: symbolTop.y - yOffset}\n ], text);\n this.rightLines.push(line);\n symbol.topLines.push(line);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2 - yOffset},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + lineLength/2;\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n var diffX = left.x - lineLength/2;\n if (symbolLeft.x < left.x) {\n diffX = symbolLeft.x - lineLength/2;\n }\n yOffset = Math.max(symbol.topLines.length, this.leftLines.length) * 10;\n line = drawLine(this.chart, left, [\n {x: diffX, y: left.y - yOffset},\n {x: diffX, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftLines.push(line);\n symbol.topLines.push(line);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\n yOffset = Math.max(symbol.topLines.length, this.leftLines.length) * 10;\n line = drawLine(this.chart, left, [\n {x: symbolTop.x + (left.x - symbolTop.x)/2, y: left.y},\n {x: symbolTop.x + (left.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftLines.push(line);\n symbol.topLines.push(line);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'top')) {\n yOffset = Math.max(symbol.topLines.length, this.topLines.length) * 10;\n line = drawLine(this.chart, top, [\n {x: top.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.topLines.push(line);\n symbol.topLines.push(line);\n this.topStart = true;\n symbol.topEnd = true;\n maxX = top.x;\n }\n\n //update line style\n if (this.lineStyle[symbol.key] && line){\n line.attr(this.lineStyle[symbol.key]);\n }\n\n if (line) {\n for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n var otherLine = this.chart.lines[l];\n\n var ePath = otherLine.attr('path'),\n lPath = line.attr('path');\n\n for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n var newPath = [];\n newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\n var line1_from_x = newPath[0][1];\n var line1_from_y = newPath[0][2];\n var line1_to_x = newPath[1][1];\n var line1_to_y = newPath[1][2];\n\n for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n var newLinePath = [];\n newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\n var line2_from_x = newLinePath[0][1];\n var line2_from_y = newLinePath[0][2];\n var line2_to_x = newLinePath[1][1];\n var line2_to_y = newLinePath[1][2];\n\n var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n if (res.onLine1 && res.onLine2) {\n\n var newSegment;\n if (line2_from_y === line2_to_y) {\n if (line2_from_x > line2_to_x) {\n newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n } else {\n if (line2_from_y > line2_to_y) {\n newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n }\n\n lP += 2;\n }\n }\n }\n }\n\n this.chart.lines.push(line);\n if (this.chart.minXFromSymbols === undefined || this.chart.minXFromSymbols > left.x) {\n this.chart.minXFromSymbols = left.x;\n }\n }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.js\n// module id = 2\n// module chunks = 0","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n var textAnchor = 'start';\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n if (from.x > firstTo.x) {\n x -= chart.options['text-margin']/2;\n textAnchor = 'end';\n } else {\n x += chart.options['text-margin']/2;\n }\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n if (from.y > firstTo.y) {\n y -= chart.options['text-margin']*2;\n }\n }\n }\n\n textPath.attr({\n 'text-anchor': textAnchor,\n 'font-size': chart.options['font-size'],\n 'fill': chart.options['font-color'],\n x: x,\n y: y\n });\n\n if (font) textPath.attr({ 'font': font });\n if (fontF) textPath.attr({ 'font-family': fontF });\n if (fontW) textPath.attr({ 'font-weight': fontW });\n }\n\n return line;\n}\n\nfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n var denominator, a, b, numerator1, numerator2, result = {\n x: null,\n y: null,\n onLine1: false,\n onLine2: false\n };\n denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n if (denominator === 0) {\n return result;\n }\n a = line1StartY - line2StartY;\n b = line1StartX - line2StartX;\n numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n a = numerator1 / denominator;\n b = numerator2 / denominator;\n\n // if we cast these lines infinitely in both directions, they intersect here:\n result.x = line1StartX + (a * (line1EndX - line1StartX));\n result.y = line1StartY + (a * (line1EndY - line1StartY));\n /*\n // it is worth noting that this should be the same as:\n x = line2StartX + (b * (line2EndX - line2StartX));\n y = line2StartX + (b * (line2EndY - line2StartY));\n */\n // if line1 is a segment and line2 is infinite, they intersect if:\n if (a > 0 && a < 1) {\n result.onLine1 = true;\n }\n // if line2 is a segment and line1 is infinite, they intersect if:\n if (b > 0 && b < 1) {\n result.onLine2 = true;\n }\n // if line1 and line2 are segments, they intersect if both of the above are true\n return result;\n}\n\nmodule.exports = {\n\tdrawPath: drawPath,\n\tdrawLine: drawLine,\n\tcheckLineIntersection: checkLineIntersection\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.functions.js\n// module id = 3\n// module chunks = 0","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\nvar Parallel = require('./flowchart.symbol.parallel');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s);\n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n case 'parallel':\n dispSymbols[s.key] = new Parallel(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else if (prevDisp instanceof(Parallel)) {\n if (prev.path1 === s) {\n prevDisp.path1(dispSymb);\n }\n if (prev.path2 === s) {\n prevDisp.path2(dispSymb);\n }\n if (prev.path3 === s) {\n prevDisp.path3(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (dispSymb instanceof(Parallel)) {\n if (s.path1) {\n constructChart(s.path1, dispSymb, s);\n }\n if (s.path2) {\n constructChart(s.path2, dispSymb, s);\n }\n if (s.path3) {\n constructChart(s.path3, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n },\n options: function() {\n return this.diagram.options;\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if (prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getStyle(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '{}';\n }\n\n function getSymbValue(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '';\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)];\n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n \n function getAnnotation(s) {\n\tvar startIndex = s.indexOf(\"(\") + 1, endIndex = s.indexOf(\")\");\n\tvar tmp = s.substring(startIndex, endIndex);\n\tif(tmp.indexOf(\",\") > 0) { tmp = tmp.substring(0, tmp.indexOf(\",\")); }\n\tvar tmp_split = tmp.split(\"@\");\n\tif(tmp_split.length > 1)\n\t\treturn startIndex >= 0 && endIndex >= 0 ? tmp_split[1] : \"\";\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0].trim();\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0].replace(/\\(.*\\)/, ''),\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null,\n function: null,\n lineStyle: {},\n params: {}\n };\n\n //parse parameters\n var params = parts[0].match(/\\((.*)\\)/);\n if (params && params.length > 1){\n var entries = params[1].split(',');\n for(var i = 0; i < entries.length; i++) {\n var entry = entries[i].split('=');\n if (entry.length == 2) {\n symbol.params[entry[0]] = entry[1];\n }\n }\n }\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':$') >= 0) {\n sub = symbol.text.split(':$');\n symbol.text = sub.shift();\n symbol.function = sub.join(':$');\n } else if (symbol.symbolType.indexOf(':$') >= 0) {\n sub = symbol.symbolType.split(':$');\n symbol.symbolType = sub.shift();\n symbol.function = sub.join(':$');\n } else if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n var ann = getAnnotation(line);\n if (ann) {\n line = line.replace('@' + ann, ''); \n }\n // flow\n var flowSymbols = line.split('->');\n for (var iS = 0, lenS = flowSymbols.length; iS < lenS; iS++) {\n var flowSymb = flowSymbols[iS];\n var symbVal = getSymbValue(flowSymb);\n\n if (symbVal === 'true' || symbVal === 'false') {\n // map true or false to yes or no respectively\n flowSymb = flowSymb.replace('true', 'yes');\n flowSymb = flowSymb.replace('false', 'no');\n }\n \n var next = getNextPath(flowSymb);\n var realSymb = getSymbol(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (ann) {\n if (realSymb.symbolType === 'condition') {\n if (next === \"yes\" || next === \"true\") {\n realSymb.yes_annotation = ann;\n } else {\n realSymb.no_annotation = ann;\n }\n } else if (realSymb.symbolType === 'parallel') {\n if (next === 'path1') {\n realSymb.path1_annotation = ann;\n } else if (next === 'path2') {\n realSymb.path2_annotation = ann;\n } else if (next === 'path3') {\n realSymb.path3_annotation = ann;\n }\n }\n ann = null;\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (iS + 1 < lenS) {\n var nextSymb = flowSymbols[iS + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n } else if (line.indexOf('@>') >= 0) {\n\n // line style\n var lineStyleSymbols = line.split('@>');\n for (var iSS = 0, lenSS = lineStyleSymbols.length; iSS < lenSS; iSS++) {\n if ((iSS + 1) !== lenSS) {\n var curSymb = getSymbol(lineStyleSymbols[iSS]);\n var nextSymbol = getSymbol(lineStyleSymbols[iSS+1]);\n\n curSymb['lineStyle'][nextSymbol.key] = JSON.parse(getStyle(lineStyleSymbols[iSS + 1]));\n }\n }\n }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.parse.js\n// module id = 4\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.yes_annotation = options.yes_annotation;\n this.no_annotation = options.no_annotation;\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = options.direction_yes;\n this.no_direction = options.direction_no;\n if (!this.no_direction && this.yes_direction === 'right') {\n this.no_direction = 'bottom';\n } else if (!this.yes_direction && this.no_direction === 'bottom') {\n this.yes_direction = 'right'\n }\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n this.symbol = symbol\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n var self = this;\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n if (self.right_symbol.symbolType === 'end') return;\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n \n if (this.left_symbol) {\n var leftPoint = this.getLeft();\n \n if (!this.left_symbol.isPositioned) {\n this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n \n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n \n if (hasSymbolUnder) {\n if (self.left_symbol.symbolType === 'end') return;\n self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n \n this.left_symbol.isPositioned = true;\n \n this.left_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.yes_annotation ? this.yes_annotation : this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.no_annotation ? this.no_annotation : this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.condition.js\n// module id = 5\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Parallel(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n this.path1_annotation = options.path1_annotation || '';\n this.path2_annotation = options.path2_annotation || '';\n this.path3_annotation = options.path3_annotation || '';\n this.textMargin = this.getAttr('text-margin');\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'top';\n this.params = options.params;\n if (options.direction_next === 'path1' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n if (options.direction_next === 'path2' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n if (options.direction_next === 'path3' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n\n if (options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3) {\n if (options.direction_path1 === 'right') {\n this.path2_direction = 'bottom';\n this.path1_direction = 'right';\n this.path3_direction = 'top';\n } else if (options.direction_path1 === 'top') {\n this.path2_direction = 'right';\n this.path1_direction = 'top';\n this.path3_direction = 'bottom';\n } else if (options.direction_path1 === 'left') {\n this.path2_direction = 'right';\n this.path1_direction = 'left';\n this.path3_direction = 'bottom';\n } else {\n this.path2_direction = 'right';\n this.path1_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else if (options.path1 && !options.direction_path1 && options.path2 && options.direction_path2 && options.path3 && !options.direction_path3) {\n if (options.direction_path2 === 'right') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'top';\n } else if (options.direction_path2 === 'left') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'left';\n this.path3_direction = 'right';\n } else {\n this.path1_direction = 'right';\n this.path2_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else if (options.path1 && !options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && options.direction_path3) {\n if (options.direction_path2 === 'right') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'top';\n this.path3_direction = 'right';\n } else if (options.direction_path2 === 'left') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'left';\n } else {\n this.path1_direction = 'right';\n this.path2_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else {\n this.path1_direction = options.direction_path1;\n this.path2_direction = options.direction_path2;\n this.path3_direction = options.direction_path3;\n }\n\n this.path1_direction = this.path1_direction || 'bottom';\n this.path2_direction = this.path2_direction || 'right';\n this.path3_direction = this.path3_direction || 'top';\n\n this.initialize();\n}\ninherits(Parallel, Symbol);\n\nParallel.prototype.render = function() {\n if (this.path1_direction) {\n this[this.path1_direction + '_symbol'] = this.path1_symbol;\n }\n\n if (this.path2_direction) {\n this[this.path2_direction + '_symbol'] = this.path2_symbol;\n }\n\n if (this.path3_direction) {\n this[this.path3_direction + '_symbol'] = this.path3_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.top_symbol) {\n var topPoint = this.getTop();\n\n if (!this.top_symbol.isPositioned) {\n this.top_symbol.shiftY(this.getY() - this.top_symbol.height - lineLength);\n this.top_symbol.setX(topPoint.x + this.top_symbol.width);\n this.top_symbol.isPositioned = true;\n\n this.top_symbol.render();\n }\n }\n\n var self = this;\n\n if (this.left_symbol) {\n var leftPoint = this.getLeft();\n\n if (!this.left_symbol.isPositioned) {\n this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n if (self.left_symbol.symbolType === 'end') return;\n self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.left_symbol.isPositioned = true;\n\n this.left_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n if (self.right_symbol.symbolType === 'end') return;\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nParallel.prototype.renderLines = function() {\n if (this.path1_symbol) {\n this.drawLineTo(this.path1_symbol, this.path1_annotation, this.path1_direction);\n }\n\n if (this.path2_symbol) {\n this.drawLineTo(this.path2_symbol, this.path2_annotation, this.path2_direction);\n }\n\n if (this.path3_symbol) {\n this.drawLineTo(this.path3_symbol, this.path3_annotation, this.path3_direction);\n }\n};\n\nmodule.exports = Parallel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.parallel.js\n// module id = 6\n// module chunks = 0","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\nvar Parallel = require('./flowchart.symbol.parallel');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if (symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else if (symbol instanceof(Parallel)) {\n symbol.path1 = function(nextSymbol) {\n symbol.path1_symbol = nextSymbol;\n if (symbol.path2_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.path2 = function(nextSymbol) {\n symbol.path2_symbol = nextSymbol;\n if (symbol.path3_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.path3 = function(nextSymbol) {\n symbol.path3_symbol = nextSymbol;\n if (symbol.path1_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n minX = 0,\n minY = 0,\n symbol,\n line;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n var x;\n var y;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n var leftX = symbol.getX()\n x = leftX + symbol.width;\n y = symbol.getY() + symbol.height;\n if (leftX < minX) {\n minX = leftX;\n }\n if (x > maxX) {\n maxX = x;\n }\n if (y > maxY) {\n maxY = y;\n }\n }\n\n for (i = 0, len = this.lines.length; i < len; i++) {\n line = this.lines[i].getBBox();\n x = line.x;\n y = line.y;\n var x2 = line.x2;\n var y2 = line.y2;\n if (x < minX) {\n minX = x;\n }\n if (y < minY) {\n minY = y;\n }\n if (x2 > maxX) {\n maxX = x2;\n }\n if (y2 > maxY) {\n maxY = y2;\n }\n }\n\n var scale = this.options['scale'];\n var lineWidth = this.options['line-width'];\n\n if (this.minXFromSymbols < minX) minX = this.minXFromSymbols;\n\n if (minX < 0) minX -= lineWidth;\n if (minY < 0) minY -= lineWidth;\n\n var width = maxX + lineWidth - minX;\n var height = maxY + lineWidth - minY;\n\n this.paper.setSize(width * scale, height * scale);\n this.paper.setViewBox(minX, minY, width, height, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode && paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.chart.js\n// module id = 7\n// module chunks = 0","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'roundness': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {},\n 'parallel': {}\n } //,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.defaults.js\n// module id = 8\n// module chunks = 0","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.shim.js\n// module id = 9\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.end.js\n// module id = 10\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n this.symbol = symbol\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.inputoutput.js\n// module id = 11\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.operation.js\n// module id = 12\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.start.js\n// module id = 13\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.subroutine.js\n// module id = 14\n// module chunks = 0","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\n\t(function( $ ) {\n\t\tfunction paramFit(needle, haystack) {\n\t\t\treturn needle == haystack ||\n\t\t\t( Array.isArray(haystack) && (haystack.includes(needle) || haystack.includes(Number(needle)) ))\n\t\t}\n\t\tvar methods = {\n\t\t\tinit : function(options) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tthis.chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tthis.chart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t},\n\t\t\tsetFlowStateByParam : function(param, paramValue, newFlowState) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar chart = this.chart;\n\n\t\t\t\t\t// @todo this should be part of Symbol API\n\t\t\t\t\tvar nextSymbolKeys = ['next', 'yes', 'no', 'path1', 'path2', 'path3'];\n\n\t\t\t\t\tfor (var property in chart.symbols) {\n\t\t\t\t\t\tif (chart.symbols.hasOwnProperty(property)) {\n\t\t\t\t\t\t\tvar symbol = chart.symbols[property];\n\t\t\t\t\t\t\tvar val = symbol.params[param];\n\t\t\t\t\t\t\tif (paramFit(val, paramValue)) {\n\t\t\t\t\t\t\t\tsymbol.flowstate = newFlowState;\n\t\t\t\t\t\t\t\tfor (var nski = 0; nski < nextSymbolKeys.length; nski++) {\n\t\t\t\t\t\t\t\t\tvar nextSymbolKey = nextSymbolKeys[nski];\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey] &&\n\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey]['params'] &&\n\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey]['params'][param] &&\n\t\t\t\t\t\t\t\t\t\tparamFit(symbol[nextSymbolKey]['params'][param], paramValue)\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tsymbol.lineStyle[symbol[nextSymbolKey]['key']] = {stroke: chart.options()['flowstate'][newFlowState]['fill']};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tchart.clean();\n\t\t\t\t\tchart.drawSVG(this);\n\t\t\t\t});\n\n\t\t\t},\n\t\t\tclearFlowState: function () {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar chart = this.chart;\n\n\t\t\t\t\tfor (var property in chart.symbols) {\n\t\t\t\t\t\tif (chart.symbols.hasOwnProperty(property)) {\n\t\t\t\t\t\t\tvar node = chart.symbols[property];\n\t\t\t\t\t\t\tnode.flowstate = '';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tchart.clean();\n\t\t\t\t\tchart.drawSVG(this);\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\t$.fn.flowChart = function(methodOrOptions) {\n\t\t\tif ( methods[methodOrOptions] ) {\n\t\t\t\treturn methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 ));\n\t\t\t} else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ) {\n\t\t\t\t// Default to \"init\"\n\t\t\t\treturn methods.init.apply( this, arguments );\n\t\t\t} else {\n\t\t\t\t$.error( 'Method ' + methodOrOptions + ' does not exist on jQuery.flowChart' );\n\t\t\t}\n\t\t};\n\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/jquery-plugin.js\n// module id = 15\n// module chunks = 0","module.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"Raphael\"\n// module id = 16\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/release/flowchart.min.js b/release/flowchart.min.js index fb937726..c3043097 100644 --- a/release/flowchart.min.js +++ b/release/flowchart.min.js @@ -1,8 +1,8 @@ -// flowchart.js, v1.16.0 +// flowchart.js, v1.17.0 // Copyright (c)2021 Adriano Raiano (adrai). // Distributed under MIT license // http://adrai.github.io/flowchart.js -!function(t,i){if("object"==typeof exports&&"object"==typeof module)module.exports=i(require("Raphael"));else if("function"==typeof define&&define.amd)define(["Raphael"],i);else{var e=i("object"==typeof exports?require("Raphael"):t.Raphael);for(var s in e)("object"==typeof exports?exports:t)[s]=e[s]}}(this,function(t){return function(t){function i(s){if(e[s])return e[s].exports;var n=e[s]={exports:{},id:s,loaded:!1};return t[s].call(n.exports,n,n.exports,i),n.loaded=!0,n.exports}var e={};return i.m=t,i.c=e,i.p="",i(0)}([function(t,i,e){e(9);var s=e(4);e(15);var n={parse:s};"undefined"!=typeof window&&(window.flowchart=n),t.exports=n},function(t,i){function e(t,i){if(!t||"function"==typeof t)return i;var s={};for(var n in i)s[n]=i[n];for(n in t)t[n]&&("object"==typeof s[n]?s[n]=e(s[n],t[n]):s[n]=t[n]);return s}function s(t,i){if("function"==typeof Object.create)t.super_=i,t.prototype=Object.create(i.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}});else{t.super_=i;var e=function(){};e.prototype=i.prototype,t.prototype=new e,t.prototype.constructor=t}}t.exports={defaults:e,inherits:s}},function(t,i,e){function s(t,i,e){this.chart=t,this.group=this.chart.paper.set(),this.symbol=e,this.connectedTo=[],this.symbolType=i.symbolType,this.flowstate=i.flowstate||"future",this.lineStyle=i.lineStyle||{},this.key=i.key||"",this.leftLines=[],this.rightLines=[],this.topLines=[],this.bottomLines=[],this.params=i.params,this.next_direction=i.next&&i.direction_next?i.direction_next:void 0,this.text=this.chart.paper.text(0,0,i.text),i.key&&(this.text.node.id=i.key+"t"),this.text.node.setAttribute("class",this.getAttr("class")+"t"),this.text.attr({"text-anchor":"start",x:this.getAttr("text-margin"),fill:this.getAttr("font-color"),"font-size":this.getAttr("font-size")});var s=this.getAttr("font"),n=this.getAttr("font-family"),o=this.getAttr("font-weight");s&&this.text.attr({font:s}),n&&this.text.attr({"font-family":n}),o&&this.text.attr({"font-weight":o}),i.link&&this.text.attr("href",i.link),i.function&&(this.text.attr({cursor:"pointer"}),this.text.node.addEventListener("click",function(t){window[i.function](t,i)},!1)),i.target&&this.text.attr("target",i.target);var h=this.getAttr("maxWidth");if(h){for(var r=i.text.split(" "),a="",l=0,p=r.length;lh?"\n"+y:" "+y}this.text.attr("text",a.substring(1))}if(this.group.push(this.text),e){var x=this.getAttr("text-margin");e.attr({fill:this.getAttr("fill"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*x,height:this.text.getBBox().height+2*x}),e.node.setAttribute("class",this.getAttr("class")),i.link&&e.attr("href",i.link),i.target&&e.attr("target",i.target),i.function&&(e.node.addEventListener("click",function(t){window[i.function](t,i)},!1),e.attr({cursor:"pointer"})),i.key&&(e.node.id=i.key),this.group.push(e),e.insertBefore(this.text),this.text.attr({y:e.getBBox().height/2}),this.initialize()}}var n=e(3),o=n.drawLine,h=n.checkLineIntersection;s.prototype.getAttr=function(t){if(this.chart){var i,e=this.chart.options?this.chart.options[t]:void 0,s=this.chart.options.symbols?this.chart.options.symbols[this.symbolType][t]:void 0;return this.chart.options.flowstate&&this.chart.options.flowstate[this.flowstate]&&(i=this.chart.options.flowstate[this.flowstate][t]),i||s||e}},s.prototype.initialize=function(){this.group.transform("t"+this.getAttr("line-width")+","+this.getAttr("line-width")),this.width=this.group.getBBox().width,this.height=this.group.getBBox().height},s.prototype.getCenter=function(){return{x:this.getX()+this.width/2,y:this.getY()+this.height/2}},s.prototype.getX=function(){return this.group.getBBox().x},s.prototype.getY=function(){return this.group.getBBox().y},s.prototype.shiftX=function(t){this.group.transform("t"+(this.getX()+t)+","+this.getY())},s.prototype.setX=function(t){this.group.transform("t"+t+","+this.getY())},s.prototype.shiftY=function(t){this.group.transform("t"+this.getX()+","+(this.getY()+t))},s.prototype.setY=function(t){this.group.transform("t"+this.getX()+","+t)},s.prototype.getTop=function(){var t=this.getY(),i=this.getX()+this.width/2;return{x:i,y:t}},s.prototype.getBottom=function(){var t=this.getY()+this.height,i=this.getX()+this.width/2;return{x:i,y:t}},s.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX();return{x:i,y:t}},s.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width;return{x:i,y:t}},s.prototype.render=function(){if(this.next){var t=this,i=this.getAttr("line-length");if("right"===this.next_direction){var e=this.getRight();this.next.isPositioned||(this.next.setY(e.y-this.next.height/2),this.next.shiftX(this.group.getBBox().x+this.width+i),function e(){for(var s,n=!1,o=0,h=t.chart.symbols.length;ot.next.getCenter().y&&r<=t.next.width/2){n=!0;break}}if(n){if("end"===t.next.symbolType)return;t.next.setX(s.getX()+s.width+i),e()}}(),this.next.isPositioned=!0,this.next.render())}else if("left"===this.next_direction){var s=this.getLeft();this.next.isPositioned||(this.next.setY(s.y-this.next.height/2),this.next.shiftX(-(this.group.getBBox().x+this.width+i)),function e(){for(var s,n=!1,o=0,h=t.chart.symbols.length;ot.next.getCenter().y&&r<=t.next.width/2){n=!0;break}}if(n){if("end"===t.next.symbolType)return;t.next.setX(s.getX()+s.width+i),e()}}(),this.next.isPositioned=!0,this.next.render())}else{var n=this.getBottom();this.next.isPositioned||(this.next.shiftY(this.getY()+this.height+i),this.next.setX(n.x-this.next.width/2),this.next.isPositioned=!0,this.next.render())}}},s.prototype.renderLines=function(){this.next&&(this.next_direction?this.drawLineTo(this.next,this.getAttr("arrow-text")||"",this.next_direction):this.drawLineTo(this.next,this.getAttr("arrow-text")||""))},s.prototype.drawLineTo=function(t,i,e){this.connectedTo.indexOf(t)<0&&this.connectedTo.push(t);var s,n,r=this.getCenter().x,a=this.getCenter().y,l=this.getRight(),p=this.getBottom(),y=this.getTop(),x=this.getLeft(),g=t.getCenter().x,f=t.getCenter().y,c=t.getTop(),d=t.getRight(),m=t.getLeft(),u=r===g,b=a===f,_=af||this===t,w=r>g,L=rk&&(k=c.x);else n=10*Math.max(t.topLines.length,this.bottomLines.length),s=this.leftEnd&&v?o(this.chart,p,[{x:p.x,y:p.y+B/2-n},{x:p.x+(p.x-c.x)/2,y:p.y+B/2-n},{x:p.x+(p.x-c.x)/2,y:c.y-B/2-n},{x:c.x,y:c.y-B/2-n},{x:c.x,y:c.y}],i):o(this.chart,p,[{x:p.x,y:c.y-B/2-n},{x:c.x,y:c.y-B/2-n},{x:c.x,y:c.y}],i),this.bottomLines.push(s),t.topLines.push(s),this.bottomStart=!0,t.topEnd=!0,k=p.x+(p.x-c.x)/2;else n=10*Math.max(t.topLines.length,this.rightLines.length),s=o(this.chart,l,[{x:l.x+B/2,y:l.y-n},{x:l.x+B/2,y:c.y-B/2-n},{x:c.x,y:c.y-B/2-n},{x:c.x,y:c.y}],i),this.rightLines.push(s),t.topLines.push(s),this.rightStart=!0,t.topEnd=!0,k=l.x+B/2;else n=10*Math.max(t.topLines.length,this.rightLines.length),s=o(this.chart,l,[{x:l.x+B/2,y:l.y-n},{x:l.x+B/2,y:c.y-B/2-n},{x:c.x,y:c.y-B/2-n},{x:c.x,y:c.y}],i),this.rightLines.push(s),t.topLines.push(s),this.rightStart=!0,t.topEnd=!0,k=l.x+B/2;else 0===t.rightLines.length&&0===this.leftLines.length?s=o(this.chart,x,d,i):(n=10*Math.max(t.rightLines.length,this.leftLines.length),s=o(this.chart,l,[{x:l.x,y:l.y-n},{x:l.x,y:d.y-n},{x:d.x,y:d.y-n},{x:d.x,y:d.y}],i)),this.leftLines.push(s),t.rightLines.push(s),this.leftStart=!0,t.rightEnd=!0,k=d.x;else 0===t.leftLines.length&&0===this.rightLines.length?s=o(this.chart,l,m,i):(n=10*Math.max(t.leftLines.length,this.rightLines.length),s=o(this.chart,l,[{x:l.x,y:l.y-n},{x:l.x,y:m.y-n},{x:m.x,y:m.y-n},{x:m.x,y:m.y}],i)),this.rightLines.push(s),t.leftLines.push(s),this.rightStart=!0,t.leftEnd=!0,k=m.x;else 0===t.topLines.length&&0===this.bottomLines.length?s=o(this.chart,p,c,i):(n=10*Math.max(t.topLines.length,this.bottomLines.length),s=o(this.chart,p,[{x:c.x,y:c.y-n},{x:c.x,y:c.y}],i)),this.bottomLines.push(s),t.topLines.push(s),this.bottomStart=!0,t.topEnd=!0,k=p.x;if(this.lineStyle[t.key]&&s&&s.attr(this.lineStyle[t.key]),s){for(var O=0,X=this.chart.lines.length;OW?(J=["L",q.x+2*A,I],C.splice($+1,0,J),J=["C",q.x+2*A,I,q.x,I-4*A,q.x-2*A,I],C.splice($+2,0,J),s.attr("path",C)):(J=["L",q.x-2*A,I],C.splice($+1,0,J),J=["C",q.x-2*A,I,q.x,I-4*A,q.x+2*A,I],C.splice($+2,0,J),s.attr("path",C)):I>Q?(J=["L",G,q.y+2*A],C.splice($+1,0,J),J=["C",G,q.y+2*A,G+4*A,q.y,G,q.y-2*A],C.splice($+2,0,J),s.attr("path",C)):(J=["L",G,q.y-2*A],C.splice($+1,0,J),J=["C",G,q.y-2*A,G+4*A,q.y,G,q.y+2*A],C.splice($+2,0,J),s.attr("path",C)),$+=2}}}this.chart.lines.push(s),(void 0===this.chart.minXFromSymbols||this.chart.minXFromSymbols>x.x)&&(this.chart.minXFromSymbols=x.x)}(!this.chart.maxXFromLine||this.chart.maxXFromLine&&k>this.chart.maxXFromLine)&&(this.chart.maxXFromLine=k)},t.exports=s},function(t,i){function e(t,i,e){var s,n,o="M{0},{1}";for(s=2,n=2*e.length+2;sd.x?i.x-(i.x-d.x)/2:d.x-(d.x-i.x)/2,u=i.y>d.y?i.y-(i.y-d.y)/2:d.y-(d.y-i.y)/2,c?(m-=g.getBBox().width/2,u-=t.options["text-margin"]):(m+=t.options["text-margin"],u-=g.getBBox().height/2)):(m=i.x,u=i.y,c?(i.x>d.x?(m-=t.options["text-margin"]/2,f="end"):m+=t.options["text-margin"]/2,u-=t.options["text-margin"]):(m+=t.options["text-margin"]/2,u+=t.options["text-margin"],i.y>d.y&&(u-=2*t.options["text-margin"]))),g.attr({"text-anchor":f,"font-size":t.options["font-size"],fill:t.options["font-color"],x:m,y:u}),l&&g.attr({font:l}),p&&g.attr({"font-family":p}),y&&g.attr({"font-weight":y})}return a}function n(t,i,e,s,n,o,h,r){var a,l,p,y,x,g={x:null,y:null,onLine1:!1,onLine2:!1};return a=(r-o)*(e-t)-(h-n)*(s-i),0===a?g:(l=i-o,p=t-n,y=(h-n)*l-(r-o)*p,x=(e-t)*l-(s-i)*p,l=y/a,p=x/a,g.x=t+l*(e-t),g.y=i+l*(s-i),l>0&&l<1&&(g.onLine1=!0),p>0&&p<1&&(g.onLine2=!0),g)}t.exports={drawPath:e,drawLine:s,checkLineIntersection:n}},function(t,i,e){function s(t){function i(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?t.substring(i,e):"{}"}function e(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?t.substring(i,e):""}function s(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?f.symbols[t.substring(0,i-1)]:f.symbols[t]}function x(t){var i="next",e=t.indexOf("(")+1,s=t.indexOf(")");return e>=0&&s>=0&&(i=F.substring(e,s),i.indexOf(",")<0&&"yes"!==i&&"no"!==i&&(i="next, "+i)),i}function g(t){var i=t.indexOf("(")+1,e=t.indexOf(")"),s=t.substring(i,e);s.indexOf(",")>0&&(s=s.substring(0,s.indexOf(",")));var n=s.split("@");if(n.length>1)return i>=0&&e>=0?n[1]:""}t=t||"",t=t.trim();for(var f={symbols:{},start:null,drawSVG:function(t,i){function e(t){if(g[t.key])return g[t.key];switch(t.symbolType){case"start":g[t.key]=new o(x,t);break;case"end":g[t.key]=new h(x,t);break;case"operation":g[t.key]=new r(x,t);break;case"inputoutput":g[t.key]=new a(x,t);break;case"subroutine":g[t.key]=new l(x,t);break;case"condition":g[t.key]=new p(x,t);break;case"parallel":g[t.key]=new y(x,t);break;default:return new Error("Wrong symbol type!")}return g[t.key]}var s=this;this.diagram&&this.diagram.clean();var x=new n(t,i);this.diagram=x;var g={};!function t(i,n,o){var h=e(i);return s.start===i?x.startWith(h):n&&o&&!n.pathOk&&(n instanceof p?(o.yes===i&&n.yes(h),o.no===i&&n.no(h)):n instanceof y?(o.path1===i&&n.path1(h),o.path2===i&&n.path2(h),o.path3===i&&n.path3(h)):n.then(h)),h.pathOk?h:(h instanceof p?(i.yes&&t(i.yes,h,i),i.no&&t(i.no,h,i)):h instanceof y?(i.path1&&t(i.path1,h,i),i.path2&&t(i.path2,h,i),i.path3&&t(i.path3,h,i)):i.next&&t(i.next,h,i),h)}(this.start),x.render()},clean:function(){this.diagram.clean()},options:function(){return this.diagram.options}},c=[],d=0,m=1,u=t.length;m")<0&&w.indexOf("=>")<0&&w.indexOf("@>")<0?(c[_-1]+="\n"+w,c.splice(_,1),v--):_++}for(;c.length>0;){var L=c.splice(0,1)[0].trim();if(L.indexOf("=>")>=0){var k=L.split("=>"),B={key:k[0].replace(/\(.*\)/,""),symbolType:k[1],text:null,link:null,target:null,flowstate:null,function:null,lineStyle:{},params:{}},A=k[0].match(/\((.*)\)/);if(A&&A.length>1)for(var M=A[1].split(","),O=0;O=0&&(T=B.symbolType.split(": "),B.symbolType=T.shift(),B.text=T.join(": ")),B.text&&B.text.indexOf(":$")>=0?(T=B.text.split(":$"),B.text=T.shift(),B.function=T.join(":$")):B.symbolType.indexOf(":$")>=0?(T=B.symbolType.split(":$"),B.symbolType=T.shift(),B.function=T.join(":$")):B.text&&B.text.indexOf(":>")>=0?(T=B.text.split(":>"),B.text=T.shift(),B.link=T.join(":>")):B.symbolType.indexOf(":>")>=0&&(T=B.symbolType.split(":>"),B.symbolType=T.shift(),B.link=T.join(":>")),B.symbolType.indexOf("\n")>=0&&(B.symbolType=B.symbolType.split("\n")[0]),B.link){var S=B.link.indexOf("[")+1,C=B.link.indexOf("]");S>=0&&C>=0&&(B.target=B.link.substring(S,C),B.link=B.link.substring(0,S-1))}if(B.text&&B.text.indexOf("|")>=0){var Y=B.text.split("|");B.flowstate=Y.pop().trim(),B.text=Y.join("|")}f.symbols[B.key]=B}else if(L.indexOf("->")>=0){var P=g(L);P&&(L=L.replace("@"+P,""));for(var j=L.split("->"),E=0,z=j.length;E=0){var G=$.split(",");$=G[0],V=G[1].trim()}if(P&&("condition"===N.symbolType?"yes"===$||"true"===$?N.yes_annotation=P:N.no_annotation=P:"parallel"===N.symbolType&&("path1"===$?N.path1_annotation=P:"path2"===$?N.path2_annotation=P:"path3"===$&&(N.path3_annotation=P)),P=null),f.start||(f.start=N),E+1")>=0)for(var W=L.split("@>"),Q=0,q=W.length;Qt.right_symbol.getCenter().y&&r<=t.right_symbol.width/2){n=!0;break}}if(n){if("end"===t.right_symbol.symbolType)return;t.right_symbol.setX(s.getX()+s.width+i),e()}}(),this.right_symbol.isPositioned=!0,this.right_symbol.render())}if(this.left_symbol){var n=this.getLeft();this.left_symbol.isPositioned||(this.left_symbol.setY(n.y-this.left_symbol.height/2),this.left_symbol.shiftX(-(this.group.getBBox().x+this.width+i)),function e(){for(var s,n=!1,o=0,h=t.chart.symbols.length;ot.left_symbol.getCenter().y&&r<=t.left_symbol.width/2){n=!0;break}}if(n){if("end"===t.left_symbol.symbolType)return;t.left_symbol.setX(s.getX()+s.width+i),e()}}(),this.left_symbol.isPositioned=!0,this.left_symbol.render())}},s.prototype.renderLines=function(){this.yes_symbol&&this.drawLineTo(this.yes_symbol,this.yes_annotation?this.yes_annotation:this.getAttr("yes-text"),this.yes_direction),this.no_symbol&&this.drawLineTo(this.no_symbol,this.no_annotation?this.no_annotation:this.getAttr("no-text"),this.no_direction)},t.exports=s},function(t,i,e){function s(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},n.call(this,t,i,e),this.path1_annotation=i.path1_annotation||"",this.path2_annotation=i.path2_annotation||"",this.path3_annotation=i.path3_annotation||"",this.textMargin=this.getAttr("text-margin"),this.path1_direction="bottom",this.path2_direction="right",this.path3_direction="top",this.params=i.params,"path1"===i.direction_next&&!i[i.direction_next]&&i.next&&(i[i.direction_next]=i.next),"path2"===i.direction_next&&!i[i.direction_next]&&i.next&&(i[i.direction_next]=i.next),"path3"===i.direction_next&&!i[i.direction_next]&&i.next&&(i[i.direction_next]=i.next),i.path1&&i.direction_path1&&i.path2&&!i.direction_path2&&i.path3&&!i.direction_path3?"right"===i.direction_path1?(this.path2_direction="bottom",this.path1_direction="right",this.path3_direction="top"):"top"===i.direction_path1?(this.path2_direction="right",this.path1_direction="top",this.path3_direction="bottom"):"left"===i.direction_path1?(this.path2_direction="right",this.path1_direction="left",this.path3_direction="bottom"):(this.path2_direction="right",this.path1_direction="bottom",this.path3_direction="top"):i.path1&&!i.direction_path1&&i.path2&&i.direction_path2&&i.path3&&!i.direction_path3?"right"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="right",this.path3_direction="top"):"left"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="left",this.path3_direction="right"):(this.path1_direction="right",this.path2_direction="bottom",this.path3_direction="top"):i.path1&&!i.direction_path1&&i.path2&&!i.direction_path2&&i.path3&&i.direction_path3?"right"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="top",this.path3_direction="right"):"left"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="right",this.path3_direction="left"):(this.path1_direction="right",this.path2_direction="bottom",this.path3_direction="top"):(this.path1_direction=i.direction_path1,this.path2_direction=i.direction_path2,this.path3_direction=i.direction_path3),this.path1_direction=this.path1_direction||"bottom",this.path2_direction=this.path2_direction||"right",this.path3_direction=this.path3_direction||"top",this.initialize()}var n=e(2),o=e(1).inherits;o(s,n),s.prototype.render=function(){this.path1_direction&&(this[this.path1_direction+"_symbol"]=this.path1_symbol),this.path2_direction&&(this[this.path2_direction+"_symbol"]=this.path2_symbol),this.path3_direction&&(this[this.path3_direction+"_symbol"]=this.path3_symbol);var t=this.getAttr("line-length");if(this.bottom_symbol){var i=this.getBottom();this.bottom_symbol.isPositioned||(this.bottom_symbol.shiftY(this.getY()+this.height+t),this.bottom_symbol.setX(i.x-this.bottom_symbol.width/2),this.bottom_symbol.isPositioned=!0,this.bottom_symbol.render())}if(this.top_symbol){var e=this.getTop();this.top_symbol.isPositioned||(this.top_symbol.shiftY(this.getY()-this.top_symbol.height-t),this.top_symbol.setX(e.x+this.top_symbol.width),this.top_symbol.isPositioned=!0,this.top_symbol.render())}var s=this;if(this.left_symbol){var n=this.getLeft();this.left_symbol.isPositioned||(this.left_symbol.setY(n.y-this.left_symbol.height/2),this.left_symbol.shiftX(-(this.group.getBBox().x+this.width+t)),function i(){for(var e,n=!1,o=0,h=s.chart.symbols.length;os.left_symbol.getCenter().y&&r<=s.left_symbol.width/2){n=!0;break}}if(n){if("end"===s.left_symbol.symbolType)return;s.left_symbol.setX(e.getX()+e.width+t),i()}}(),this.left_symbol.isPositioned=!0,this.left_symbol.render())}if(this.right_symbol){var o=this.getRight();this.right_symbol.isPositioned||(this.right_symbol.setY(o.y-this.right_symbol.height/2),this.right_symbol.shiftX(this.group.getBBox().x+this.width+t),function i(){for(var e,n=!1,o=0,h=s.chart.symbols.length;os.right_symbol.getCenter().y&&r<=s.right_symbol.width/2){n=!0;break}}if(n){if("end"===s.right_symbol.symbolType)return;s.right_symbol.setX(e.getX()+e.width+t),i()}}(),this.right_symbol.isPositioned=!0,this.right_symbol.render())}},s.prototype.renderLines=function(){this.path1_symbol&&this.drawLineTo(this.path1_symbol,this.path1_annotation,this.path1_direction),this.path2_symbol&&this.drawLineTo(this.path2_symbol,this.path2_annotation,this.path2_direction),this.path3_symbol&&this.drawLineTo(this.path3_symbol,this.path3_annotation,this.path3_direction)},t.exports=s},function(t,i,e){function s(t,i){i=i||{},this.paper=new n(t),this.options=o(i,h),this.symbols=[],this.lines=[],this.start=null}var n=e(16),o=e(1).defaults,h=e(8),r=e(5),a=e(6);s.prototype.handle=function(t){this.symbols.indexOf(t)<=-1&&this.symbols.push(t);var i=this;return t instanceof r?(t.yes=function(e){return t.yes_symbol=e,t.no_symbol&&(t.pathOk=!0),i.handle(e)},t.no=function(e){return t.no_symbol=e,t.yes_symbol&&(t.pathOk=!0),i.handle(e)}):t instanceof a?(t.path1=function(e){return t.path1_symbol=e,t.path2_symbol&&(t.pathOk=!0),i.handle(e)},t.path2=function(e){return t.path2_symbol=e,t.path3_symbol&&(t.pathOk=!0),i.handle(e)},t.path3=function(e){return t.path3_symbol=e,t.path1_symbol&&(t.pathOk=!0),i.handle(e)}):t.then=function(e){return t.next=e,t.pathOk=!0,i.handle(e)},t},s.prototype.startWith=function(t){return this.start=t,this.handle(t)},s.prototype.render=function(){var t,i,e=0,s=0,n=0,o=0,h=0,r=0,a=0,l=0;for(n=0,o=this.symbols.length;ne&&(e=t.width),t.height>s&&(s=t.height);for(n=0,o=this.symbols.length;nh&&(h=p),y>r&&(r=y)}for(n=0,o=this.lines.length;nh&&(h=g),f>r&&(r=f)}var c=this.options.scale,d=this.options["line-width"];this.minXFromSymbols>>0;if(0===e)return-1;var s=0;if(arguments.length>0&&(s=Number(arguments[1]),s!=s?s=0:0!==s&&s!=1/0&&s!=-(1/0)&&(s=(s>0||-1)*Math.floor(Math.abs(s)))),s>=e)return-1;for(var n=s>=0?s:Math.max(e-Math.abs(s),0);n>>0;if(0===e)return-1;var s=e;arguments.length>1&&(s=Number(arguments[1]),s!=s?s=0:0!==s&&s!=1/0&&s!=-(1/0)&&(s=(s>0||-1)*Math.floor(Math.abs(s))));for(var n=s>=0?Math.min(s,e-1):e-Math.abs(s);n>=0;n--)if(n in i&&i[n]===t)return n;return-1}),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")})},function(t,i,e){function s(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"End",n.call(this,t,i,e)}var n=e(2),o=e(1).inherits;o(s,n),t.exports=s},function(t,i,e){function s(t,i){i=i||{},n.call(this,t,i),this.textMargin=this.getAttr("text-margin"),this.text.attr({x:3*this.textMargin});var e=this.text.getBBox().width+4*this.textMargin,s=this.text.getBBox().height+2*this.textMargin,o=this.textMargin,h=s/2,a={x:o,y:h},l=[{x:o-this.textMargin,y:s},{x:o-this.textMargin+e,y:s},{x:o-this.textMargin+e+2*this.textMargin,y:0},{x:o-this.textMargin+2*this.textMargin,y:0},{x:o,y:h}],p=r(t,a,l);p.attr({stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),fill:this.getAttr("fill")}),i.link&&p.attr("href",i.link),i.target&&p.attr("target",i.target),i.key&&(p.node.id=i.key),p.node.setAttribute("class",this.getAttr("class")),this.text.attr({y:p.getBBox().height/2}),this.group.push(p),p.insertBefore(this.text),this.symbol=p,this.initialize()}var n=e(2),o=e(1).inherits,h=e(3),r=h.drawPath;o(s,n),s.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.textMargin;return{x:i,y:t}},s.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width-this.textMargin;return{x:i,y:t}},t.exports=s},function(t,i,e){function s(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},n.call(this,t,i,e)}var n=e(2),o=e(1).inherits;o(s,n),t.exports=s},function(t,i,e){function s(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"Start",n.call(this,t,i,e)}var n=e(2),o=e(1).inherits;o(s,n),t.exports=s},function(t,i,e){function s(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},n.call(this,t,i,e),e.attr({width:this.text.getBBox().width+4*this.getAttr("text-margin")}),this.text.attr({x:2*this.getAttr("text-margin")});var s=t.paper.rect(0,0,0,0);s.attr({x:this.getAttr("text-margin"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*this.getAttr("text-margin"),height:this.text.getBBox().height+2*this.getAttr("text-margin"),fill:this.getAttr("fill")}),i.key&&(s.node.id=i.key+"i");var o=this.getAttr("font"),h=this.getAttr("font-family"),r=this.getAttr("font-weight");o&&s.attr({font:o}),h&&s.attr({"font-family":h}),r&&s.attr({"font-weight":r}),i.link&&s.attr("href",i.link),i.target&&s.attr("target",i.target),this.group.push(s),s.insertBefore(this.text),this.initialize()}var n=e(2),o=e(1).inherits;o(s,n),t.exports=s},function(t,i,e){if("undefined"!=typeof jQuery){var s=e(4);!function(t){function i(t,i){return t==i||Array.isArray(i)&&(i.includes(t)||i.includes(Number(t)))}var e={init:function(i){return this.each(function(){var e=t(this);this.chart=s(e.text()),e.html(""),this.chart.drawSVG(this,i)})},setFlowStateByParam:function(t,e,s){ -return this.each(function(){var n=this.chart,o=["next","yes","no","path1","path2","path3"];for(var h in n.symbols)if(n.symbols.hasOwnProperty(h)){var r=n.symbols[h],a=r.params[t];if(i(a,e)){r.flowstate=s;for(var l=0;lh?"\n"+y:" "+y}this.text.attr("text",a.substring(1))}if(this.group.push(this.text),e){var x=this.getAttr("text-margin");e.attr({fill:this.getAttr("fill"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*x,height:this.text.getBBox().height+2*x}),e.node.setAttribute("class",this.getAttr("class")),e.node.setAttribute("ry",this.getAttr("roundness")),e.node.setAttribute("rx",this.getAttr("roundness")),i.link&&e.attr("href",i.link),i.target&&e.attr("target",i.target),i.function&&(e.node.addEventListener("click",function(t){window[i.function](t,i)},!1),e.attr({cursor:"pointer"})),i.key&&(e.node.id=i.key),this.group.push(e),e.insertBefore(this.text),this.text.attr({y:e.getBBox().height/2}),this.initialize()}}var n=e(3),o=n.drawLine,h=n.checkLineIntersection;s.prototype.getAttr=function(t){if(this.chart){var i,e=this.chart.options?this.chart.options[t]:void 0,s=this.chart.options.symbols?this.chart.options.symbols[this.symbolType][t]:void 0;return this.chart.options.flowstate&&this.chart.options.flowstate[this.flowstate]&&(i=this.chart.options.flowstate[this.flowstate][t]),i||s||e}},s.prototype.initialize=function(){this.group.transform("t"+this.getAttr("line-width")+","+this.getAttr("line-width")),this.width=this.group.getBBox().width,this.height=this.group.getBBox().height},s.prototype.getCenter=function(){return{x:this.getX()+this.width/2,y:this.getY()+this.height/2}},s.prototype.getX=function(){return this.group.getBBox().x},s.prototype.getY=function(){return this.group.getBBox().y},s.prototype.shiftX=function(t){this.group.transform("t"+(this.getX()+t)+","+this.getY())},s.prototype.setX=function(t){this.group.transform("t"+t+","+this.getY())},s.prototype.shiftY=function(t){this.group.transform("t"+this.getX()+","+(this.getY()+t))},s.prototype.setY=function(t){this.group.transform("t"+this.getX()+","+t)},s.prototype.getTop=function(){var t=this.getY(),i=this.getX()+this.width/2;return{x:i,y:t}},s.prototype.getBottom=function(){var t=this.getY()+this.height,i=this.getX()+this.width/2;return{x:i,y:t}},s.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX();return{x:i,y:t}},s.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width;return{x:i,y:t}},s.prototype.render=function(){if(this.next){var t=this,i=this.getAttr("line-length");if("right"===this.next_direction){var e=this.getRight();this.next.isPositioned||(this.next.setY(e.y-this.next.height/2),this.next.shiftX(this.group.getBBox().x+this.width+i),function e(){for(var s,n=!1,o=0,h=t.chart.symbols.length;ot.next.getCenter().y&&r<=t.next.width/2){n=!0;break}}if(n){if("end"===t.next.symbolType)return;t.next.setX(s.getX()+s.width+i),e()}}(),this.next.isPositioned=!0,this.next.render())}else if("left"===this.next_direction){var s=this.getLeft();this.next.isPositioned||(this.next.setY(s.y-this.next.height/2),this.next.shiftX(-(this.group.getBBox().x+this.width+i)),function e(){for(var s,n=!1,o=0,h=t.chart.symbols.length;ot.next.getCenter().y&&r<=t.next.width/2){n=!0;break}}if(n){if("end"===t.next.symbolType)return;t.next.setX(s.getX()+s.width+i),e()}}(),this.next.isPositioned=!0,this.next.render())}else{var n=this.getBottom();this.next.isPositioned||(this.next.shiftY(this.getY()+this.height+i),this.next.setX(n.x-this.next.width/2),this.next.isPositioned=!0,this.next.render())}}},s.prototype.renderLines=function(){this.next&&(this.next_direction?this.drawLineTo(this.next,this.getAttr("arrow-text")||"",this.next_direction):this.drawLineTo(this.next,this.getAttr("arrow-text")||""))},s.prototype.drawLineTo=function(t,i,e){this.connectedTo.indexOf(t)<0&&this.connectedTo.push(t);var s,n,r=this.getCenter().x,a=this.getCenter().y,l=this.getRight(),p=this.getBottom(),y=this.getTop(),x=this.getLeft(),g=t.getCenter().x,f=t.getCenter().y,c=t.getTop(),d=t.getRight(),m=t.getLeft(),u=r===g,b=a===f,_=af||this===t,w=r>g,L=rk&&(k=c.x);else n=10*Math.max(t.topLines.length,this.bottomLines.length),s=this.leftEnd&&v?o(this.chart,p,[{x:p.x,y:p.y+B/2-n},{x:p.x+(p.x-c.x)/2,y:p.y+B/2-n},{x:p.x+(p.x-c.x)/2,y:c.y-B/2-n},{x:c.x,y:c.y-B/2-n},{x:c.x,y:c.y}],i):o(this.chart,p,[{x:p.x,y:c.y-B/2-n},{x:c.x,y:c.y-B/2-n},{x:c.x,y:c.y}],i),this.bottomLines.push(s),t.topLines.push(s),this.bottomStart=!0,t.topEnd=!0,k=p.x+(p.x-c.x)/2;else n=10*Math.max(t.topLines.length,this.rightLines.length),s=o(this.chart,l,[{x:l.x+B/2,y:l.y-n},{x:l.x+B/2,y:c.y-B/2-n},{x:c.x,y:c.y-B/2-n},{x:c.x,y:c.y}],i),this.rightLines.push(s),t.topLines.push(s),this.rightStart=!0,t.topEnd=!0,k=l.x+B/2;else n=10*Math.max(t.topLines.length,this.rightLines.length),s=o(this.chart,l,[{x:l.x+B/2,y:l.y-n},{x:l.x+B/2,y:c.y-B/2-n},{x:c.x,y:c.y-B/2-n},{x:c.x,y:c.y}],i),this.rightLines.push(s),t.topLines.push(s),this.rightStart=!0,t.topEnd=!0,k=l.x+B/2;else 0===t.rightLines.length&&0===this.leftLines.length?s=o(this.chart,x,d,i):(n=10*Math.max(t.rightLines.length,this.leftLines.length),s=o(this.chart,l,[{x:l.x,y:l.y-n},{x:l.x,y:d.y-n},{x:d.x,y:d.y-n},{x:d.x,y:d.y}],i)),this.leftLines.push(s),t.rightLines.push(s),this.leftStart=!0,t.rightEnd=!0,k=d.x;else 0===t.leftLines.length&&0===this.rightLines.length?s=o(this.chart,l,m,i):(n=10*Math.max(t.leftLines.length,this.rightLines.length),s=o(this.chart,l,[{x:l.x,y:l.y-n},{x:l.x,y:m.y-n},{x:m.x,y:m.y-n},{x:m.x,y:m.y}],i)),this.rightLines.push(s),t.leftLines.push(s),this.rightStart=!0,t.leftEnd=!0,k=m.x;else 0===t.topLines.length&&0===this.bottomLines.length?s=o(this.chart,p,c,i):(n=10*Math.max(t.topLines.length,this.bottomLines.length),s=o(this.chart,p,[{x:c.x,y:c.y-n},{x:c.x,y:c.y}],i)),this.bottomLines.push(s),t.topLines.push(s),this.bottomStart=!0,t.topEnd=!0,k=p.x;if(this.lineStyle[t.key]&&s&&s.attr(this.lineStyle[t.key]),s){for(var O=0,X=this.chart.lines.length;OW?(J=["L",q.x+2*A,I],C.splice($+1,0,J),J=["C",q.x+2*A,I,q.x,I-4*A,q.x-2*A,I],C.splice($+2,0,J),s.attr("path",C)):(J=["L",q.x-2*A,I],C.splice($+1,0,J),J=["C",q.x-2*A,I,q.x,I-4*A,q.x+2*A,I],C.splice($+2,0,J),s.attr("path",C)):I>Q?(J=["L",G,q.y+2*A],C.splice($+1,0,J),J=["C",G,q.y+2*A,G+4*A,q.y,G,q.y-2*A],C.splice($+2,0,J),s.attr("path",C)):(J=["L",G,q.y-2*A],C.splice($+1,0,J),J=["C",G,q.y-2*A,G+4*A,q.y,G,q.y+2*A],C.splice($+2,0,J),s.attr("path",C)),$+=2}}}this.chart.lines.push(s),(void 0===this.chart.minXFromSymbols||this.chart.minXFromSymbols>x.x)&&(this.chart.minXFromSymbols=x.x)}(!this.chart.maxXFromLine||this.chart.maxXFromLine&&k>this.chart.maxXFromLine)&&(this.chart.maxXFromLine=k)},t.exports=s},function(t,i){function e(t,i,e){var s,n,o="M{0},{1}";for(s=2,n=2*e.length+2;sd.x?i.x-(i.x-d.x)/2:d.x-(d.x-i.x)/2,u=i.y>d.y?i.y-(i.y-d.y)/2:d.y-(d.y-i.y)/2,c?(m-=g.getBBox().width/2,u-=t.options["text-margin"]):(m+=t.options["text-margin"],u-=g.getBBox().height/2)):(m=i.x,u=i.y,c?(i.x>d.x?(m-=t.options["text-margin"]/2,f="end"):m+=t.options["text-margin"]/2,u-=t.options["text-margin"]):(m+=t.options["text-margin"]/2,u+=t.options["text-margin"],i.y>d.y&&(u-=2*t.options["text-margin"]))),g.attr({"text-anchor":f,"font-size":t.options["font-size"],fill:t.options["font-color"],x:m,y:u}),l&&g.attr({font:l}),p&&g.attr({"font-family":p}),y&&g.attr({"font-weight":y})}return a}function n(t,i,e,s,n,o,h,r){var a,l,p,y,x,g={x:null,y:null,onLine1:!1,onLine2:!1};return a=(r-o)*(e-t)-(h-n)*(s-i),0===a?g:(l=i-o,p=t-n,y=(h-n)*l-(r-o)*p,x=(e-t)*l-(s-i)*p,l=y/a,p=x/a,g.x=t+l*(e-t),g.y=i+l*(s-i),l>0&&l<1&&(g.onLine1=!0),p>0&&p<1&&(g.onLine2=!0),g)}t.exports={drawPath:e,drawLine:s,checkLineIntersection:n}},function(t,i,e){function s(t){function i(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?t.substring(i,e):"{}"}function e(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?t.substring(i,e):""}function s(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?f.symbols[t.substring(0,i-1)]:f.symbols[t]}function x(t){var i="next",e=t.indexOf("(")+1,s=t.indexOf(")");return e>=0&&s>=0&&(i=F.substring(e,s),i.indexOf(",")<0&&"yes"!==i&&"no"!==i&&(i="next, "+i)),i}function g(t){var i=t.indexOf("(")+1,e=t.indexOf(")"),s=t.substring(i,e);s.indexOf(",")>0&&(s=s.substring(0,s.indexOf(",")));var n=s.split("@");if(n.length>1)return i>=0&&e>=0?n[1]:""}t=t||"",t=t.trim();for(var f={symbols:{},start:null,drawSVG:function(t,i){function e(t){if(g[t.key])return g[t.key];switch(t.symbolType){case"start":g[t.key]=new o(x,t);break;case"end":g[t.key]=new h(x,t);break;case"operation":g[t.key]=new r(x,t);break;case"inputoutput":g[t.key]=new a(x,t);break;case"subroutine":g[t.key]=new l(x,t);break;case"condition":g[t.key]=new p(x,t);break;case"parallel":g[t.key]=new y(x,t);break;default:return new Error("Wrong symbol type!")}return g[t.key]}var s=this;this.diagram&&this.diagram.clean();var x=new n(t,i);this.diagram=x;var g={};!function t(i,n,o){var h=e(i);return s.start===i?x.startWith(h):n&&o&&!n.pathOk&&(n instanceof p?(o.yes===i&&n.yes(h),o.no===i&&n.no(h)):n instanceof y?(o.path1===i&&n.path1(h),o.path2===i&&n.path2(h),o.path3===i&&n.path3(h)):n.then(h)),h.pathOk?h:(h instanceof p?(i.yes&&t(i.yes,h,i),i.no&&t(i.no,h,i)):h instanceof y?(i.path1&&t(i.path1,h,i),i.path2&&t(i.path2,h,i),i.path3&&t(i.path3,h,i)):i.next&&t(i.next,h,i),h)}(this.start),x.render()},clean:function(){this.diagram.clean()},options:function(){return this.diagram.options}},c=[],d=0,m=1,u=t.length;m")<0&&w.indexOf("=>")<0&&w.indexOf("@>")<0?(c[_-1]+="\n"+w,c.splice(_,1),v--):_++}for(;c.length>0;){var L=c.splice(0,1)[0].trim();if(L.indexOf("=>")>=0){var k=L.split("=>"),B={key:k[0].replace(/\(.*\)/,""),symbolType:k[1],text:null,link:null,target:null,flowstate:null,function:null,lineStyle:{},params:{}},A=k[0].match(/\((.*)\)/);if(A&&A.length>1)for(var M=A[1].split(","),O=0;O=0&&(T=B.symbolType.split(": "),B.symbolType=T.shift(),B.text=T.join(": ")),B.text&&B.text.indexOf(":$")>=0?(T=B.text.split(":$"),B.text=T.shift(),B.function=T.join(":$")):B.symbolType.indexOf(":$")>=0?(T=B.symbolType.split(":$"),B.symbolType=T.shift(),B.function=T.join(":$")):B.text&&B.text.indexOf(":>")>=0?(T=B.text.split(":>"),B.text=T.shift(),B.link=T.join(":>")):B.symbolType.indexOf(":>")>=0&&(T=B.symbolType.split(":>"),B.symbolType=T.shift(),B.link=T.join(":>")),B.symbolType.indexOf("\n")>=0&&(B.symbolType=B.symbolType.split("\n")[0]),B.link){var S=B.link.indexOf("[")+1,C=B.link.indexOf("]");S>=0&&C>=0&&(B.target=B.link.substring(S,C),B.link=B.link.substring(0,S-1))}if(B.text&&B.text.indexOf("|")>=0){var Y=B.text.split("|");B.flowstate=Y.pop().trim(),B.text=Y.join("|")}f.symbols[B.key]=B}else if(L.indexOf("->")>=0){var P=g(L);P&&(L=L.replace("@"+P,""));for(var j=L.split("->"),E=0,z=j.length;E=0){var G=$.split(",");$=G[0],V=G[1].trim()}if(P&&("condition"===N.symbolType?"yes"===$||"true"===$?N.yes_annotation=P:N.no_annotation=P:"parallel"===N.symbolType&&("path1"===$?N.path1_annotation=P:"path2"===$?N.path2_annotation=P:"path3"===$&&(N.path3_annotation=P)),P=null),f.start||(f.start=N),E+1")>=0)for(var W=L.split("@>"),Q=0,q=W.length;Qt.right_symbol.getCenter().y&&r<=t.right_symbol.width/2){n=!0;break}}if(n){if("end"===t.right_symbol.symbolType)return;t.right_symbol.setX(s.getX()+s.width+i),e()}}(),this.right_symbol.isPositioned=!0,this.right_symbol.render())}if(this.left_symbol){var n=this.getLeft();this.left_symbol.isPositioned||(this.left_symbol.setY(n.y-this.left_symbol.height/2),this.left_symbol.shiftX(-(this.group.getBBox().x+this.width+i)),function e(){for(var s,n=!1,o=0,h=t.chart.symbols.length;ot.left_symbol.getCenter().y&&r<=t.left_symbol.width/2){n=!0;break}}if(n){if("end"===t.left_symbol.symbolType)return;t.left_symbol.setX(s.getX()+s.width+i),e()}}(),this.left_symbol.isPositioned=!0,this.left_symbol.render())}},s.prototype.renderLines=function(){this.yes_symbol&&this.drawLineTo(this.yes_symbol,this.yes_annotation?this.yes_annotation:this.getAttr("yes-text"),this.yes_direction),this.no_symbol&&this.drawLineTo(this.no_symbol,this.no_annotation?this.no_annotation:this.getAttr("no-text"),this.no_direction)},t.exports=s},function(t,i,e){function s(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},n.call(this,t,i,e),this.path1_annotation=i.path1_annotation||"",this.path2_annotation=i.path2_annotation||"",this.path3_annotation=i.path3_annotation||"",this.textMargin=this.getAttr("text-margin"),this.path1_direction="bottom",this.path2_direction="right",this.path3_direction="top",this.params=i.params,"path1"===i.direction_next&&!i[i.direction_next]&&i.next&&(i[i.direction_next]=i.next),"path2"===i.direction_next&&!i[i.direction_next]&&i.next&&(i[i.direction_next]=i.next),"path3"===i.direction_next&&!i[i.direction_next]&&i.next&&(i[i.direction_next]=i.next),i.path1&&i.direction_path1&&i.path2&&!i.direction_path2&&i.path3&&!i.direction_path3?"right"===i.direction_path1?(this.path2_direction="bottom",this.path1_direction="right",this.path3_direction="top"):"top"===i.direction_path1?(this.path2_direction="right",this.path1_direction="top",this.path3_direction="bottom"):"left"===i.direction_path1?(this.path2_direction="right",this.path1_direction="left",this.path3_direction="bottom"):(this.path2_direction="right",this.path1_direction="bottom",this.path3_direction="top"):i.path1&&!i.direction_path1&&i.path2&&i.direction_path2&&i.path3&&!i.direction_path3?"right"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="right",this.path3_direction="top"):"left"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="left",this.path3_direction="right"):(this.path1_direction="right",this.path2_direction="bottom",this.path3_direction="top"):i.path1&&!i.direction_path1&&i.path2&&!i.direction_path2&&i.path3&&i.direction_path3?"right"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="top",this.path3_direction="right"):"left"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="right",this.path3_direction="left"):(this.path1_direction="right",this.path2_direction="bottom",this.path3_direction="top"):(this.path1_direction=i.direction_path1,this.path2_direction=i.direction_path2,this.path3_direction=i.direction_path3),this.path1_direction=this.path1_direction||"bottom",this.path2_direction=this.path2_direction||"right",this.path3_direction=this.path3_direction||"top",this.initialize()}var n=e(2),o=e(1).inherits;o(s,n),s.prototype.render=function(){this.path1_direction&&(this[this.path1_direction+"_symbol"]=this.path1_symbol),this.path2_direction&&(this[this.path2_direction+"_symbol"]=this.path2_symbol),this.path3_direction&&(this[this.path3_direction+"_symbol"]=this.path3_symbol);var t=this.getAttr("line-length");if(this.bottom_symbol){var i=this.getBottom();this.bottom_symbol.isPositioned||(this.bottom_symbol.shiftY(this.getY()+this.height+t),this.bottom_symbol.setX(i.x-this.bottom_symbol.width/2),this.bottom_symbol.isPositioned=!0,this.bottom_symbol.render())}if(this.top_symbol){var e=this.getTop();this.top_symbol.isPositioned||(this.top_symbol.shiftY(this.getY()-this.top_symbol.height-t),this.top_symbol.setX(e.x+this.top_symbol.width),this.top_symbol.isPositioned=!0,this.top_symbol.render())}var s=this;if(this.left_symbol){var n=this.getLeft();this.left_symbol.isPositioned||(this.left_symbol.setY(n.y-this.left_symbol.height/2),this.left_symbol.shiftX(-(this.group.getBBox().x+this.width+t)),function i(){for(var e,n=!1,o=0,h=s.chart.symbols.length;os.left_symbol.getCenter().y&&r<=s.left_symbol.width/2){n=!0;break}}if(n){if("end"===s.left_symbol.symbolType)return;s.left_symbol.setX(e.getX()+e.width+t),i()}}(),this.left_symbol.isPositioned=!0,this.left_symbol.render())}if(this.right_symbol){var o=this.getRight();this.right_symbol.isPositioned||(this.right_symbol.setY(o.y-this.right_symbol.height/2),this.right_symbol.shiftX(this.group.getBBox().x+this.width+t),function i(){for(var e,n=!1,o=0,h=s.chart.symbols.length;os.right_symbol.getCenter().y&&r<=s.right_symbol.width/2){n=!0;break}}if(n){if("end"===s.right_symbol.symbolType)return;s.right_symbol.setX(e.getX()+e.width+t),i()}}(),this.right_symbol.isPositioned=!0,this.right_symbol.render())}},s.prototype.renderLines=function(){this.path1_symbol&&this.drawLineTo(this.path1_symbol,this.path1_annotation,this.path1_direction),this.path2_symbol&&this.drawLineTo(this.path2_symbol,this.path2_annotation,this.path2_direction),this.path3_symbol&&this.drawLineTo(this.path3_symbol,this.path3_annotation,this.path3_direction)},t.exports=s},function(t,i,e){function s(t,i){i=i||{},this.paper=new n(t),this.options=o(i,h),this.symbols=[],this.lines=[],this.start=null}var n=e(16),o=e(1).defaults,h=e(8),r=e(5),a=e(6);s.prototype.handle=function(t){this.symbols.indexOf(t)<=-1&&this.symbols.push(t);var i=this;return t instanceof r?(t.yes=function(e){return t.yes_symbol=e,t.no_symbol&&(t.pathOk=!0),i.handle(e)},t.no=function(e){return t.no_symbol=e,t.yes_symbol&&(t.pathOk=!0),i.handle(e)}):t instanceof a?(t.path1=function(e){return t.path1_symbol=e,t.path2_symbol&&(t.pathOk=!0),i.handle(e)},t.path2=function(e){return t.path2_symbol=e,t.path3_symbol&&(t.pathOk=!0),i.handle(e)},t.path3=function(e){return t.path3_symbol=e,t.path1_symbol&&(t.pathOk=!0),i.handle(e)}):t.then=function(e){return t.next=e,t.pathOk=!0,i.handle(e)},t},s.prototype.startWith=function(t){return this.start=t,this.handle(t)},s.prototype.render=function(){var t,i,e=0,s=0,n=0,o=0,h=0,r=0,a=0,l=0;for(n=0,o=this.symbols.length;ne&&(e=t.width),t.height>s&&(s=t.height);for(n=0,o=this.symbols.length;nh&&(h=p),y>r&&(r=y)}for(n=0,o=this.lines.length;nh&&(h=g),f>r&&(r=f)}var c=this.options.scale,d=this.options["line-width"];this.minXFromSymbols>>0;if(0===e)return-1;var s=0;if(arguments.length>0&&(s=Number(arguments[1]),s!=s?s=0:0!==s&&s!=1/0&&s!=-(1/0)&&(s=(s>0||-1)*Math.floor(Math.abs(s)))),s>=e)return-1;for(var n=s>=0?s:Math.max(e-Math.abs(s),0);n>>0;if(0===e)return-1;var s=e;arguments.length>1&&(s=Number(arguments[1]),s!=s?s=0:0!==s&&s!=1/0&&s!=-(1/0)&&(s=(s>0||-1)*Math.floor(Math.abs(s))));for(var n=s>=0?Math.min(s,e-1):e-Math.abs(s);n>=0;n--)if(n in i&&i[n]===t)return n;return-1}),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")})},function(t,i,e){function s(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"End",n.call(this,t,i,e)}var n=e(2),o=e(1).inherits;o(s,n),t.exports=s},function(t,i,e){function s(t,i){i=i||{},n.call(this,t,i),this.textMargin=this.getAttr("text-margin"),this.text.attr({x:3*this.textMargin});var e=this.text.getBBox().width+4*this.textMargin,s=this.text.getBBox().height+2*this.textMargin,o=this.textMargin,h=s/2,a={x:o,y:h},l=[{x:o-this.textMargin,y:s},{x:o-this.textMargin+e,y:s},{x:o-this.textMargin+e+2*this.textMargin,y:0},{x:o-this.textMargin+2*this.textMargin,y:0},{x:o,y:h}],p=r(t,a,l);p.attr({stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),fill:this.getAttr("fill")}),i.link&&p.attr("href",i.link),i.target&&p.attr("target",i.target),i.key&&(p.node.id=i.key),p.node.setAttribute("class",this.getAttr("class")),this.text.attr({y:p.getBBox().height/2}),this.group.push(p),p.insertBefore(this.text),this.symbol=p,this.initialize()}var n=e(2),o=e(1).inherits,h=e(3),r=h.drawPath;o(s,n),s.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.textMargin;return{x:i,y:t}},s.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width-this.textMargin;return{x:i,y:t}},t.exports=s},function(t,i,e){function s(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},n.call(this,t,i,e)}var n=e(2),o=e(1).inherits;o(s,n),t.exports=s},function(t,i,e){function s(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"Start",n.call(this,t,i,e)}var n=e(2),o=e(1).inherits;o(s,n),t.exports=s},function(t,i,e){function s(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},n.call(this,t,i,e),e.attr({width:this.text.getBBox().width+4*this.getAttr("text-margin")}),this.text.attr({x:2*this.getAttr("text-margin")});var s=t.paper.rect(0,0,0,0);s.attr({x:this.getAttr("text-margin"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*this.getAttr("text-margin"),height:this.text.getBBox().height+2*this.getAttr("text-margin"),fill:this.getAttr("fill")}),i.key&&(s.node.id=i.key+"i");var o=this.getAttr("font"),h=this.getAttr("font-family"),r=this.getAttr("font-weight");o&&s.attr({font:o}),h&&s.attr({"font-family":h}),r&&s.attr({"font-weight":r}),i.link&&s.attr("href",i.link),i.target&&s.attr("target",i.target),this.group.push(s),s.insertBefore(this.text),this.initialize()}var n=e(2),o=e(1).inherits;o(s,n),t.exports=s},function(t,i,e){if("undefined"!=typeof jQuery){var s=e(4);!function(t){function i(t,i){return t==i||Array.isArray(i)&&(i.includes(t)||i.includes(Number(t)))}var e={init:function(i){return this.each(function(){ +var e=t(this);this.chart=s(e.text()),e.html(""),this.chart.drawSVG(this,i)})},setFlowStateByParam:function(t,e,s){return this.each(function(){var n=this.chart,o=["next","yes","no","path1","path2","path3"];for(var h in n.symbols)if(n.symbols.hasOwnProperty(h)){var r=n.symbols[h],a=r.params[t];if(i(a,e)){r.flowstate=s;for(var l=0;l maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t\n\t //ndrqu Add click function with event and options params\n\t if (options.function) { \n\t symbol.node.addEventListener(\"click\", function(evt) {\n\t window[options.function](evt,options);\n\t }, false);\n\t symbol.attr({ 'cursor' : 'pointer' });\n\t }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var self = this;\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.next.symbolType === 'end') return;\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else if (this.next_direction === 'left') {\n\t\n\t var leftPoint = this.getLeft();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.setY(leftPoint.y - this.next.height/2);\n\t this.next.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.next.symbolType === 'end') return;\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, this.getAttr('arrow-text') || '', this.next_direction);\n\t } else {\n\t this.drawLineTo(this.next, this.getAttr('arrow-text') || '');\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n\t if (this.connectedTo.indexOf(symbol) < 0) {\n\t this.connectedTo.push(symbol);\n\t }\n\t\n\t var x = this.getCenter().x,\n\t y = this.getCenter().y,\n\t right = this.getRight(),\n\t bottom = this.getBottom(),\n\t top = this.getTop(),\n\t left = this.getLeft();\n\t\n\t var symbolX = symbol.getCenter().x,\n\t symbolY = symbol.getCenter().y,\n\t symbolTop = symbol.getTop(),\n\t symbolRight = symbol.getRight(),\n\t symbolLeft = symbol.getLeft();\n\t\n\t var isOnSameColumn = x === symbolX,\n\t isOnSameLine = y === symbolY,\n\t isUnder = y < symbolY,\n\t isUpper = y > symbolY || this === symbol,\n\t isLeft = x > symbolX,\n\t isRight = x < symbolX;\n\t\n\t var maxX = 0,\n\t line,\n\t yOffset,\n\t lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t if (symbol.topLines.length === 0 && this.bottomLines.length === 0) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\n\t } else {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t line = drawLine(this.chart, bottom, [\n\t {x: symbolTop.x, y: symbolTop.y - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n\t if (symbol.leftLines.length === 0 && this.rightLines.length === 0) {\n\t line = drawLine(this.chart, right, symbolLeft, text);\n\t } else {\n\t yOffset = Math.max(symbol.leftLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x, y: right.y - yOffset},\n\t {x: right.x, y: symbolLeft.y - yOffset},\n\t {x: symbolLeft.x, y: symbolLeft.y - yOffset},\n\t {x: symbolLeft.x, y: symbolLeft.y}\n\t ], text);\n\t }\n\t this.rightLines.push(line);\n\t symbol.leftLines.push(line);\n\t this.rightStart = true;\n\t symbol.leftEnd = true;\n\t maxX = symbolLeft.x;\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n\t if (symbol.rightLines.length === 0 && this.leftLines.length === 0) {\n\t line = drawLine(this.chart, left, symbolRight, text);\n\t } else {\n\t yOffset = Math.max(symbol.rightLines.length, this.leftLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x, y: right.y - yOffset},\n\t {x: right.x, y: symbolRight.y - yOffset},\n\t {x: symbolRight.x, y: symbolRight.y - yOffset},\n\t {x: symbolRight.x, y: symbolRight.y}\n\t ], text);\n\t }\n\t this.leftLines.push(line);\n\t symbol.rightLines.push(line);\n\t this.leftStart = true;\n\t symbol.rightEnd = true;\n\t maxX = symbolRight.x;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n\t yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y - yOffset},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightLines.push(line);\n\t symbol.topLines.push(line);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n\t yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y - yOffset},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightLines.push(line);\n\t symbol.topLines.push(line);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2 - yOffset},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t } else {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((!origin || origin === 'bottom') && isRight && isUnder) {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t if (symbolTop.x > maxX) maxX = symbolTop.x;\n\t } else if ((!origin || origin === 'bottom') && isRight) {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2 - yOffset},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((origin && origin === 'right') && isLeft) {\n\t yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightLines.push(line);\n\t symbol.topLines.push(line);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'right') && isRight) {\n\t yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - yOffset}\n\t ], text);\n\t this.rightLines.push(line);\n\t symbol.topLines.push(line);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2 - yOffset},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + lineLength/2;\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n\t var diffX = left.x - lineLength/2;\n\t if (symbolLeft.x < left.x) {\n\t diffX = symbolLeft.x - lineLength/2;\n\t }\n\t yOffset = Math.max(symbol.topLines.length, this.leftLines.length) * 10;\n\t line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y - yOffset},\n\t {x: diffX, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftLines.push(line);\n\t symbol.topLines.push(line);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\n\t yOffset = Math.max(symbol.topLines.length, this.leftLines.length) * 10;\n\t line = drawLine(this.chart, left, [\n\t {x: symbolTop.x + (left.x - symbolTop.x)/2, y: left.y},\n\t {x: symbolTop.x + (left.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftLines.push(line);\n\t symbol.topLines.push(line);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'top')) {\n\t yOffset = Math.max(symbol.topLines.length, this.topLines.length) * 10;\n\t line = drawLine(this.chart, top, [\n\t {x: top.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.topLines.push(line);\n\t symbol.topLines.push(line);\n\t this.topStart = true;\n\t symbol.topEnd = true;\n\t maxX = top.x;\n\t }\n\t\n\t //update line style\n\t if (this.lineStyle[symbol.key] && line){\n\t line.attr(this.lineStyle[symbol.key]);\n\t }\n\t\n\t if (line) {\n\t for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n\t var otherLine = this.chart.lines[l];\n\t\n\t var ePath = otherLine.attr('path'),\n\t lPath = line.attr('path');\n\t\n\t for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n\t var newPath = [];\n\t newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n\t newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\t\n\t var line1_from_x = newPath[0][1];\n\t var line1_from_y = newPath[0][2];\n\t var line1_to_x = newPath[1][1];\n\t var line1_to_y = newPath[1][2];\n\t\n\t for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n\t var newLinePath = [];\n\t newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n\t newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\t\n\t var line2_from_x = newLinePath[0][1];\n\t var line2_from_y = newLinePath[0][2];\n\t var line2_to_x = newLinePath[1][1];\n\t var line2_to_y = newLinePath[1][2];\n\t\n\t var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n\t if (res.onLine1 && res.onLine2) {\n\t\n\t var newSegment;\n\t if (line2_from_y === line2_to_y) {\n\t if (line2_from_x > line2_to_x) {\n\t newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t } else {\n\t if (line2_from_y > line2_to_y) {\n\t newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t }\n\t\n\t lP += 2;\n\t }\n\t }\n\t }\n\t }\n\t\n\t this.chart.lines.push(line);\n\t if (this.chart.minXFromSymbols === undefined || this.chart.minXFromSymbols > left.x) {\n\t this.chart.minXFromSymbols = left.x;\n\t }\n\t }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ }),\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ (function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t var textAnchor = 'start';\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t if (from.x > firstTo.x) {\n\t x -= chart.options['text-margin']/2;\n\t textAnchor = 'end';\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t }\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t if (from.y > firstTo.y) {\n\t y -= chart.options['text-margin']*2;\n\t }\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': textAnchor,\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ }),\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 7);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 13);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 10);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 12);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 11);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 14);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\tvar Parallel = __webpack_require__(/*! ./flowchart.symbol.parallel */ 6);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s);\n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t case 'parallel':\n\t dispSymbols[s.key] = new Parallel(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else if (prevDisp instanceof(Parallel)) {\n\t if (prev.path1 === s) {\n\t prevDisp.path1(dispSymb);\n\t }\n\t if (prev.path2 === s) {\n\t prevDisp.path2(dispSymb);\n\t }\n\t if (prev.path3 === s) {\n\t prevDisp.path3(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (dispSymb instanceof(Parallel)) {\n\t if (s.path1) {\n\t constructChart(s.path1, dispSymb, s);\n\t }\n\t if (s.path2) {\n\t constructChart(s.path2, dispSymb, s);\n\t }\n\t if (s.path3) {\n\t constructChart(s.path3, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t },\n\t options: function() {\n\t return this.diagram.options;\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if (prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getStyle(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '{}';\n\t }\n\t\n\t function getSymbValue(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '';\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)];\n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t \n\t function getAnnotation(s) {\n\t\tvar startIndex = s.indexOf(\"(\") + 1, endIndex = s.indexOf(\")\");\n\t\tvar tmp = s.substring(startIndex, endIndex);\n\t\tif(tmp.indexOf(\",\") > 0) { tmp = tmp.substring(0, tmp.indexOf(\",\")); }\n\t\tvar tmp_split = tmp.split(\"@\");\n\t\tif(tmp_split.length > 1)\n\t\t\treturn startIndex >= 0 && endIndex >= 0 ? tmp_split[1] : \"\";\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0].trim();\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0].replace(/\\(.*\\)/, ''),\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null,\n\t function: null,\n\t lineStyle: {},\n\t params: {}\n\t };\n\t\n\t //parse parameters\n\t var params = parts[0].match(/\\((.*)\\)/);\n\t if (params && params.length > 1){\n\t var entries = params[1].split(',');\n\t for(var i = 0; i < entries.length; i++) {\n\t var entry = entries[i].split('=');\n\t if (entry.length == 2) {\n\t symbol.params[entry[0]] = entry[1];\n\t }\n\t }\n\t }\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':$') >= 0) {\n\t sub = symbol.text.split(':$');\n\t symbol.text = sub.shift();\n\t symbol.function = sub.join(':$');\n\t } else if (symbol.symbolType.indexOf(':$') >= 0) {\n\t sub = symbol.symbolType.split(':$');\n\t symbol.symbolType = sub.shift();\n\t symbol.function = sub.join(':$');\n\t } else if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t var ann = getAnnotation(line);\n\t if (ann) {\n\t line = line.replace('@' + ann, ''); \n\t }\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var iS = 0, lenS = flowSymbols.length; iS < lenS; iS++) {\n\t var flowSymb = flowSymbols[iS];\n\t var symbVal = getSymbValue(flowSymb);\n\t\n\t if (symbVal === 'true' || symbVal === 'false') {\n\t // map true or false to yes or no respectively\n\t flowSymb = flowSymb.replace('true', 'yes');\n\t flowSymb = flowSymb.replace('false', 'no');\n\t }\n\t \n\t var next = getNextPath(flowSymb);\n\t var realSymb = getSymbol(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (ann) {\n\t if (realSymb.symbolType === 'condition') {\n\t if (next === \"yes\" || next === \"true\") {\n\t realSymb.yes_annotation = ann;\n\t } else {\n\t realSymb.no_annotation = ann;\n\t }\n\t } else if (realSymb.symbolType === 'parallel') {\n\t if (next === 'path1') {\n\t realSymb.path1_annotation = ann;\n\t } else if (next === 'path2') {\n\t realSymb.path2_annotation = ann;\n\t } else if (next === 'path3') {\n\t realSymb.path3_annotation = ann;\n\t }\n\t }\n\t ann = null;\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (iS + 1 < lenS) {\n\t var nextSymb = flowSymbols[iS + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t } else if (line.indexOf('@>') >= 0) {\n\t\n\t // line style\n\t var lineStyleSymbols = line.split('@>');\n\t for (var iSS = 0, lenSS = lineStyleSymbols.length; iSS < lenSS; iSS++) {\n\t if ((iSS + 1) !== lenSS) {\n\t var curSymb = getSymbol(lineStyleSymbols[iSS]);\n\t var nextSymbol = getSymbol(lineStyleSymbols[iSS+1]);\n\t\n\t curSymb['lineStyle'][nextSymbol.key] = JSON.parse(getStyle(lineStyleSymbols[iSS + 1]));\n\t }\n\t }\n\t }\n\t\n\t }\n\t return chart;\n\t}\n\t\n\tmodule.exports = parse;\n\n\n/***/ }),\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction Condition(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.yes_annotation = options.yes_annotation;\n\t this.no_annotation = options.no_annotation;\n\t this.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = options.direction_yes;\n\t this.no_direction = options.direction_no;\n\t if (!this.no_direction && this.yes_direction === 'right') {\n\t this.no_direction = 'bottom';\n\t } else if (!this.yes_direction && this.no_direction === 'bottom') {\n\t this.yes_direction = 'right'\n\t }\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t this.symbol = symbol\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t var self = this;\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.right_symbol.symbolType === 'end') return;\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t \n\t if (this.left_symbol) {\n\t var leftPoint = this.getLeft();\n\t \n\t if (!this.left_symbol.isPositioned) {\n\t this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n\t this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t \n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t \n\t if (hasSymbolUnder) {\n\t if (self.left_symbol.symbolType === 'end') return;\n\t self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t \n\t this.left_symbol.isPositioned = true;\n\t \n\t this.left_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.yes_annotation ? this.yes_annotation : this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.no_annotation ? this.no_annotation : this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ }),\n/* 6 */\n/*!******************************************!*\\\n !*** ./src/flowchart.symbol.parallel.js ***!\n \\******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Parallel(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t this.path1_annotation = options.path1_annotation || '';\n\t this.path2_annotation = options.path2_annotation || '';\n\t this.path3_annotation = options.path3_annotation || '';\n\t this.textMargin = this.getAttr('text-margin');\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t this.params = options.params;\n\t if (options.direction_next === 'path1' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path2' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path3' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t\n\t if (options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path1 === 'right') {\n\t this.path2_direction = 'bottom';\n\t this.path1_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path1 === 'top') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'top';\n\t this.path3_direction = 'bottom';\n\t } else if (options.direction_path1 === 'left') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'left';\n\t this.path3_direction = 'bottom';\n\t } else {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'left';\n\t this.path3_direction = 'right';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'top';\n\t this.path3_direction = 'right';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'left';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else {\n\t this.path1_direction = options.direction_path1;\n\t this.path2_direction = options.direction_path2;\n\t this.path3_direction = options.direction_path3;\n\t }\n\t\n\t this.path1_direction = this.path1_direction || 'bottom';\n\t this.path2_direction = this.path2_direction || 'right';\n\t this.path3_direction = this.path3_direction || 'top';\n\t\n\t this.initialize();\n\t}\n\tinherits(Parallel, Symbol);\n\t\n\tParallel.prototype.render = function() {\n\t if (this.path1_direction) {\n\t this[this.path1_direction + '_symbol'] = this.path1_symbol;\n\t }\n\t\n\t if (this.path2_direction) {\n\t this[this.path2_direction + '_symbol'] = this.path2_symbol;\n\t }\n\t\n\t if (this.path3_direction) {\n\t this[this.path3_direction + '_symbol'] = this.path3_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.top_symbol) {\n\t var topPoint = this.getTop();\n\t\n\t if (!this.top_symbol.isPositioned) {\n\t this.top_symbol.shiftY(this.getY() - this.top_symbol.height - lineLength);\n\t this.top_symbol.setX(topPoint.x + this.top_symbol.width);\n\t this.top_symbol.isPositioned = true;\n\t\n\t this.top_symbol.render();\n\t }\n\t }\n\t\n\t var self = this;\n\t\n\t if (this.left_symbol) {\n\t var leftPoint = this.getLeft();\n\t\n\t if (!this.left_symbol.isPositioned) {\n\t this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n\t this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.left_symbol.symbolType === 'end') return;\n\t self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.left_symbol.isPositioned = true;\n\t\n\t this.left_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.right_symbol.symbolType === 'end') return;\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tParallel.prototype.renderLines = function() {\n\t if (this.path1_symbol) {\n\t this.drawLineTo(this.path1_symbol, this.path1_annotation, this.path1_direction);\n\t }\n\t\n\t if (this.path2_symbol) {\n\t this.drawLineTo(this.path2_symbol, this.path2_annotation, this.path2_direction);\n\t }\n\t\n\t if (this.path3_symbol) {\n\t this.drawLineTo(this.path3_symbol, this.path3_annotation, this.path3_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Parallel;\n\n/***/ }),\n/* 7 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 16);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 8);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\tvar Parallel = __webpack_require__(/*! ./flowchart.symbol.parallel */ 6);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if (symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else if (symbol instanceof(Parallel)) {\n\t symbol.path1 = function(nextSymbol) {\n\t symbol.path1_symbol = nextSymbol;\n\t if (symbol.path2_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.path2 = function(nextSymbol) {\n\t symbol.path2_symbol = nextSymbol;\n\t if (symbol.path3_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.path3 = function(nextSymbol) {\n\t symbol.path3_symbol = nextSymbol;\n\t if (symbol.path1_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t minX = 0,\n\t minY = 0,\n\t symbol,\n\t line;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t var x;\n\t var y;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t var leftX = symbol.getX()\n\t x = leftX + symbol.width;\n\t y = symbol.getY() + symbol.height;\n\t if (leftX < minX) {\n\t minX = leftX;\n\t }\n\t if (x > maxX) {\n\t maxX = x;\n\t }\n\t if (y > maxY) {\n\t maxY = y;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.lines.length; i < len; i++) {\n\t line = this.lines[i].getBBox();\n\t x = line.x;\n\t y = line.y;\n\t var x2 = line.x2;\n\t var y2 = line.y2;\n\t if (x < minX) {\n\t minX = x;\n\t }\n\t if (y < minY) {\n\t minY = y;\n\t }\n\t if (x2 > maxX) {\n\t maxX = x2;\n\t }\n\t if (y2 > maxY) {\n\t maxY = y2;\n\t }\n\t }\n\t\n\t var scale = this.options['scale'];\n\t var lineWidth = this.options['line-width'];\n\t\n\t if (this.minXFromSymbols < minX) minX = this.minXFromSymbols;\n\t\n\t if (minX < 0) minX -= lineWidth;\n\t if (minY < 0) minY -= lineWidth;\n\t\n\t var width = maxX + lineWidth - minX;\n\t var height = maxY + lineWidth - minY;\n\t\n\t this.paper.setSize(width * scale, height * scale);\n\t this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode && paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n/***/ }),\n/* 8 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ (function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {},\n\t 'parallel': {}\n\t } //,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n/***/ }),\n/* 9 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ (function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ }),\n/* 10 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ }),\n/* 11 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t this.symbol = symbol\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ }),\n/* 12 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ }),\n/* 13 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ }),\n/* 14 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ }),\n/* 15 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\n\t\t(function( $ ) {\n\t\t\tfunction paramFit(needle, haystack) {\n\t\t\t\treturn needle == haystack ||\n\t\t\t\t( Array.isArray(haystack) && (haystack.includes(needle) || haystack.includes(Number(needle)) ))\n\t\t\t}\n\t\t\tvar methods = {\n\t\t\t\tinit : function(options) {\n\t\t\t\t\treturn this.each(function() {\n\t\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\t\tthis.chart = parse($this.text());\n\t\t\t\t\t\t$this.html('');\n\t\t\t\t\t\tthis.chart.drawSVG(this, options);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tsetFlowStateByParam : function(param, paramValue, newFlowState) {\n\t\t\t\t\treturn this.each(function() {\n\t\t\t\t\t\tvar chart = this.chart;\n\t\n\t\t\t\t\t\t// @todo this should be part of Symbol API\n\t\t\t\t\t\tvar nextSymbolKeys = ['next', 'yes', 'no', 'path1', 'path2', 'path3'];\n\t\n\t\t\t\t\t\tfor (var property in chart.symbols) {\n\t\t\t\t\t\t\tif (chart.symbols.hasOwnProperty(property)) {\n\t\t\t\t\t\t\t\tvar symbol = chart.symbols[property];\n\t\t\t\t\t\t\t\tvar val = symbol.params[param];\n\t\t\t\t\t\t\t\tif (paramFit(val, paramValue)) {\n\t\t\t\t\t\t\t\t\tsymbol.flowstate = newFlowState;\n\t\t\t\t\t\t\t\t\tfor (var nski = 0; nski < nextSymbolKeys.length; nski++) {\n\t\t\t\t\t\t\t\t\t\tvar nextSymbolKey = nextSymbolKeys[nski];\n\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey] &&\n\t\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey]['params'] &&\n\t\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey]['params'][param] &&\n\t\t\t\t\t\t\t\t\t\t\tparamFit(symbol[nextSymbolKey]['params'][param], paramValue)\n\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\tsymbol.lineStyle[symbol[nextSymbolKey]['key']] = {stroke: chart.options()['flowstate'][newFlowState]['fill']};\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tchart.clean();\n\t\t\t\t\t\tchart.drawSVG(this);\n\t\t\t\t\t});\n\t\n\t\t\t\t},\n\t\t\t\tclearFlowState: function () {\n\t\t\t\t\treturn this.each(function() {\n\t\t\t\t\t\tvar chart = this.chart;\n\t\n\t\t\t\t\t\tfor (var property in chart.symbols) {\n\t\t\t\t\t\t\tif (chart.symbols.hasOwnProperty(property)) {\n\t\t\t\t\t\t\t\tvar node = chart.symbols[property];\n\t\t\t\t\t\t\t\tnode.flowstate = '';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tchart.clean();\n\t\t\t\t\t\tchart.drawSVG(this);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t\t$.fn.flowChart = function(methodOrOptions) {\n\t\t\t\tif ( methods[methodOrOptions] ) {\n\t\t\t\t\treturn methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 ));\n\t\t\t\t} else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ) {\n\t\t\t\t\t// Default to \"init\"\n\t\t\t\t\treturn methods.init.apply( this, arguments );\n\t\t\t\t} else {\n\t\t\t\t\t$.error( 'Method ' + methodOrOptions + ' does not exist on jQuery.flowChart' );\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ }),\n/* 16 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ (function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// flowchart.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 7856b1d7e6e22eb4c6fd","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./index.js\n// module id = 0\n// module chunks = 0","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.helpers.js\n// module id = 1\n// module chunks = 0","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n this.lineStyle = (options.lineStyle || {});\n this.key = (options.key || '');\n this.leftLines = [];\n this.rightLines = [];\n this.topLines = [];\n this.bottomLines = [];\n this.params = options.params;\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n \n //ndrqu Add click function with event and options params\n if (options.function) { \n this.text.attr({ 'cursor' : 'pointer' });\n\n this.text.node.addEventListener(\"click\", function(evt) {\n window[options.function](evt,options);\n }, false);\n }\n\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n\n //ndrqu Add click function with event and options params\n if (options.function) { \n symbol.node.addEventListener(\"click\", function(evt) {\n window[options.function](evt,options);\n }, false);\n symbol.attr({ 'cursor' : 'pointer' });\n }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var self = this;\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n if (self.next.symbolType === 'end') return;\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else if (this.next_direction === 'left') {\n\n var leftPoint = this.getLeft();\n\n if (!this.next.isPositioned) {\n this.next.setY(leftPoint.y - this.next.height/2);\n this.next.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n if (self.next.symbolType === 'end') return;\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, this.getAttr('arrow-text') || '', this.next_direction);\n } else {\n this.drawLineTo(this.next, this.getAttr('arrow-text') || '');\n }\n }\n};\n\nSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n if (this.connectedTo.indexOf(symbol) < 0) {\n this.connectedTo.push(symbol);\n }\n\n var x = this.getCenter().x,\n y = this.getCenter().y,\n right = this.getRight(),\n bottom = this.getBottom(),\n top = this.getTop(),\n left = this.getLeft();\n\n var symbolX = symbol.getCenter().x,\n symbolY = symbol.getCenter().y,\n symbolTop = symbol.getTop(),\n symbolRight = symbol.getRight(),\n symbolLeft = symbol.getLeft();\n\n var isOnSameColumn = x === symbolX,\n isOnSameLine = y === symbolY,\n isUnder = y < symbolY,\n isUpper = y > symbolY || this === symbol,\n isLeft = x > symbolX,\n isRight = x < symbolX;\n\n var maxX = 0,\n line,\n yOffset,\n lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n if (symbol.topLines.length === 0 && this.bottomLines.length === 0) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n } else {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n line = drawLine(this.chart, bottom, [\n {x: symbolTop.x, y: symbolTop.y - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n if (symbol.leftLines.length === 0 && this.rightLines.length === 0) {\n line = drawLine(this.chart, right, symbolLeft, text);\n } else {\n yOffset = Math.max(symbol.leftLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x, y: right.y - yOffset},\n {x: right.x, y: symbolLeft.y - yOffset},\n {x: symbolLeft.x, y: symbolLeft.y - yOffset},\n {x: symbolLeft.x, y: symbolLeft.y}\n ], text);\n }\n this.rightLines.push(line);\n symbol.leftLines.push(line);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n if (symbol.rightLines.length === 0 && this.leftLines.length === 0) {\n line = drawLine(this.chart, left, symbolRight, text);\n } else {\n yOffset = Math.max(symbol.rightLines.length, this.leftLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x, y: right.y - yOffset},\n {x: right.x, y: symbolRight.y - yOffset},\n {x: symbolRight.x, y: symbolRight.y - yOffset},\n {x: symbolRight.x, y: symbolRight.y}\n ], text);\n }\n this.leftLines.push(line);\n symbol.rightLines.push(line);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y - yOffset},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightLines.push(line);\n symbol.topLines.push(line);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y - yOffset},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightLines.push(line);\n symbol.topLines.push(line);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2 - yOffset},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n } else {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((!origin || origin === 'bottom') && isRight && isUnder) {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n if (symbolTop.x > maxX) maxX = symbolTop.x;\n } else if ((!origin || origin === 'bottom') && isRight) {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2 - yOffset},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((origin && origin === 'right') && isLeft) {\n yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightLines.push(line);\n symbol.topLines.push(line);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y - yOffset},\n {x: symbolTop.x, y: symbolTop.y - yOffset}\n ], text);\n this.rightLines.push(line);\n symbol.topLines.push(line);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2 - yOffset},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + lineLength/2;\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n var diffX = left.x - lineLength/2;\n if (symbolLeft.x < left.x) {\n diffX = symbolLeft.x - lineLength/2;\n }\n yOffset = Math.max(symbol.topLines.length, this.leftLines.length) * 10;\n line = drawLine(this.chart, left, [\n {x: diffX, y: left.y - yOffset},\n {x: diffX, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftLines.push(line);\n symbol.topLines.push(line);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\n yOffset = Math.max(symbol.topLines.length, this.leftLines.length) * 10;\n line = drawLine(this.chart, left, [\n {x: symbolTop.x + (left.x - symbolTop.x)/2, y: left.y},\n {x: symbolTop.x + (left.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftLines.push(line);\n symbol.topLines.push(line);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'top')) {\n yOffset = Math.max(symbol.topLines.length, this.topLines.length) * 10;\n line = drawLine(this.chart, top, [\n {x: top.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.topLines.push(line);\n symbol.topLines.push(line);\n this.topStart = true;\n symbol.topEnd = true;\n maxX = top.x;\n }\n\n //update line style\n if (this.lineStyle[symbol.key] && line){\n line.attr(this.lineStyle[symbol.key]);\n }\n\n if (line) {\n for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n var otherLine = this.chart.lines[l];\n\n var ePath = otherLine.attr('path'),\n lPath = line.attr('path');\n\n for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n var newPath = [];\n newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\n var line1_from_x = newPath[0][1];\n var line1_from_y = newPath[0][2];\n var line1_to_x = newPath[1][1];\n var line1_to_y = newPath[1][2];\n\n for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n var newLinePath = [];\n newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\n var line2_from_x = newLinePath[0][1];\n var line2_from_y = newLinePath[0][2];\n var line2_to_x = newLinePath[1][1];\n var line2_to_y = newLinePath[1][2];\n\n var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n if (res.onLine1 && res.onLine2) {\n\n var newSegment;\n if (line2_from_y === line2_to_y) {\n if (line2_from_x > line2_to_x) {\n newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n } else {\n if (line2_from_y > line2_to_y) {\n newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n }\n\n lP += 2;\n }\n }\n }\n }\n\n this.chart.lines.push(line);\n if (this.chart.minXFromSymbols === undefined || this.chart.minXFromSymbols > left.x) {\n this.chart.minXFromSymbols = left.x;\n }\n }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.js\n// module id = 2\n// module chunks = 0","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n var textAnchor = 'start';\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n if (from.x > firstTo.x) {\n x -= chart.options['text-margin']/2;\n textAnchor = 'end';\n } else {\n x += chart.options['text-margin']/2;\n }\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n if (from.y > firstTo.y) {\n y -= chart.options['text-margin']*2;\n }\n }\n }\n\n textPath.attr({\n 'text-anchor': textAnchor,\n 'font-size': chart.options['font-size'],\n 'fill': chart.options['font-color'],\n x: x,\n y: y\n });\n\n if (font) textPath.attr({ 'font': font });\n if (fontF) textPath.attr({ 'font-family': fontF });\n if (fontW) textPath.attr({ 'font-weight': fontW });\n }\n\n return line;\n}\n\nfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n var denominator, a, b, numerator1, numerator2, result = {\n x: null,\n y: null,\n onLine1: false,\n onLine2: false\n };\n denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n if (denominator === 0) {\n return result;\n }\n a = line1StartY - line2StartY;\n b = line1StartX - line2StartX;\n numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n a = numerator1 / denominator;\n b = numerator2 / denominator;\n\n // if we cast these lines infinitely in both directions, they intersect here:\n result.x = line1StartX + (a * (line1EndX - line1StartX));\n result.y = line1StartY + (a * (line1EndY - line1StartY));\n /*\n // it is worth noting that this should be the same as:\n x = line2StartX + (b * (line2EndX - line2StartX));\n y = line2StartX + (b * (line2EndY - line2StartY));\n */\n // if line1 is a segment and line2 is infinite, they intersect if:\n if (a > 0 && a < 1) {\n result.onLine1 = true;\n }\n // if line2 is a segment and line1 is infinite, they intersect if:\n if (b > 0 && b < 1) {\n result.onLine2 = true;\n }\n // if line1 and line2 are segments, they intersect if both of the above are true\n return result;\n}\n\nmodule.exports = {\n\tdrawPath: drawPath,\n\tdrawLine: drawLine,\n\tcheckLineIntersection: checkLineIntersection\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.functions.js\n// module id = 3\n// module chunks = 0","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\nvar Parallel = require('./flowchart.symbol.parallel');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s);\n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n case 'parallel':\n dispSymbols[s.key] = new Parallel(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else if (prevDisp instanceof(Parallel)) {\n if (prev.path1 === s) {\n prevDisp.path1(dispSymb);\n }\n if (prev.path2 === s) {\n prevDisp.path2(dispSymb);\n }\n if (prev.path3 === s) {\n prevDisp.path3(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (dispSymb instanceof(Parallel)) {\n if (s.path1) {\n constructChart(s.path1, dispSymb, s);\n }\n if (s.path2) {\n constructChart(s.path2, dispSymb, s);\n }\n if (s.path3) {\n constructChart(s.path3, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n },\n options: function() {\n return this.diagram.options;\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if (prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getStyle(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '{}';\n }\n\n function getSymbValue(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '';\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)];\n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n \n function getAnnotation(s) {\n\tvar startIndex = s.indexOf(\"(\") + 1, endIndex = s.indexOf(\")\");\n\tvar tmp = s.substring(startIndex, endIndex);\n\tif(tmp.indexOf(\",\") > 0) { tmp = tmp.substring(0, tmp.indexOf(\",\")); }\n\tvar tmp_split = tmp.split(\"@\");\n\tif(tmp_split.length > 1)\n\t\treturn startIndex >= 0 && endIndex >= 0 ? tmp_split[1] : \"\";\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0].trim();\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0].replace(/\\(.*\\)/, ''),\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null,\n function: null,\n lineStyle: {},\n params: {}\n };\n\n //parse parameters\n var params = parts[0].match(/\\((.*)\\)/);\n if (params && params.length > 1){\n var entries = params[1].split(',');\n for(var i = 0; i < entries.length; i++) {\n var entry = entries[i].split('=');\n if (entry.length == 2) {\n symbol.params[entry[0]] = entry[1];\n }\n }\n }\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':$') >= 0) {\n sub = symbol.text.split(':$');\n symbol.text = sub.shift();\n symbol.function = sub.join(':$');\n } else if (symbol.symbolType.indexOf(':$') >= 0) {\n sub = symbol.symbolType.split(':$');\n symbol.symbolType = sub.shift();\n symbol.function = sub.join(':$');\n } else if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n var ann = getAnnotation(line);\n if (ann) {\n line = line.replace('@' + ann, ''); \n }\n // flow\n var flowSymbols = line.split('->');\n for (var iS = 0, lenS = flowSymbols.length; iS < lenS; iS++) {\n var flowSymb = flowSymbols[iS];\n var symbVal = getSymbValue(flowSymb);\n\n if (symbVal === 'true' || symbVal === 'false') {\n // map true or false to yes or no respectively\n flowSymb = flowSymb.replace('true', 'yes');\n flowSymb = flowSymb.replace('false', 'no');\n }\n \n var next = getNextPath(flowSymb);\n var realSymb = getSymbol(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (ann) {\n if (realSymb.symbolType === 'condition') {\n if (next === \"yes\" || next === \"true\") {\n realSymb.yes_annotation = ann;\n } else {\n realSymb.no_annotation = ann;\n }\n } else if (realSymb.symbolType === 'parallel') {\n if (next === 'path1') {\n realSymb.path1_annotation = ann;\n } else if (next === 'path2') {\n realSymb.path2_annotation = ann;\n } else if (next === 'path3') {\n realSymb.path3_annotation = ann;\n }\n }\n ann = null;\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (iS + 1 < lenS) {\n var nextSymb = flowSymbols[iS + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n } else if (line.indexOf('@>') >= 0) {\n\n // line style\n var lineStyleSymbols = line.split('@>');\n for (var iSS = 0, lenSS = lineStyleSymbols.length; iSS < lenSS; iSS++) {\n if ((iSS + 1) !== lenSS) {\n var curSymb = getSymbol(lineStyleSymbols[iSS]);\n var nextSymbol = getSymbol(lineStyleSymbols[iSS+1]);\n\n curSymb['lineStyle'][nextSymbol.key] = JSON.parse(getStyle(lineStyleSymbols[iSS + 1]));\n }\n }\n }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.parse.js\n// module id = 4\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.yes_annotation = options.yes_annotation;\n this.no_annotation = options.no_annotation;\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = options.direction_yes;\n this.no_direction = options.direction_no;\n if (!this.no_direction && this.yes_direction === 'right') {\n this.no_direction = 'bottom';\n } else if (!this.yes_direction && this.no_direction === 'bottom') {\n this.yes_direction = 'right'\n }\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n this.symbol = symbol\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n var self = this;\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n if (self.right_symbol.symbolType === 'end') return;\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n \n if (this.left_symbol) {\n var leftPoint = this.getLeft();\n \n if (!this.left_symbol.isPositioned) {\n this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n \n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n \n if (hasSymbolUnder) {\n if (self.left_symbol.symbolType === 'end') return;\n self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n \n this.left_symbol.isPositioned = true;\n \n this.left_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.yes_annotation ? this.yes_annotation : this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.no_annotation ? this.no_annotation : this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.condition.js\n// module id = 5\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Parallel(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n this.path1_annotation = options.path1_annotation || '';\n this.path2_annotation = options.path2_annotation || '';\n this.path3_annotation = options.path3_annotation || '';\n this.textMargin = this.getAttr('text-margin');\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'top';\n this.params = options.params;\n if (options.direction_next === 'path1' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n if (options.direction_next === 'path2' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n if (options.direction_next === 'path3' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n\n if (options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3) {\n if (options.direction_path1 === 'right') {\n this.path2_direction = 'bottom';\n this.path1_direction = 'right';\n this.path3_direction = 'top';\n } else if (options.direction_path1 === 'top') {\n this.path2_direction = 'right';\n this.path1_direction = 'top';\n this.path3_direction = 'bottom';\n } else if (options.direction_path1 === 'left') {\n this.path2_direction = 'right';\n this.path1_direction = 'left';\n this.path3_direction = 'bottom';\n } else {\n this.path2_direction = 'right';\n this.path1_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else if (options.path1 && !options.direction_path1 && options.path2 && options.direction_path2 && options.path3 && !options.direction_path3) {\n if (options.direction_path2 === 'right') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'top';\n } else if (options.direction_path2 === 'left') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'left';\n this.path3_direction = 'right';\n } else {\n this.path1_direction = 'right';\n this.path2_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else if (options.path1 && !options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && options.direction_path3) {\n if (options.direction_path2 === 'right') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'top';\n this.path3_direction = 'right';\n } else if (options.direction_path2 === 'left') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'left';\n } else {\n this.path1_direction = 'right';\n this.path2_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else {\n this.path1_direction = options.direction_path1;\n this.path2_direction = options.direction_path2;\n this.path3_direction = options.direction_path3;\n }\n\n this.path1_direction = this.path1_direction || 'bottom';\n this.path2_direction = this.path2_direction || 'right';\n this.path3_direction = this.path3_direction || 'top';\n\n this.initialize();\n}\ninherits(Parallel, Symbol);\n\nParallel.prototype.render = function() {\n if (this.path1_direction) {\n this[this.path1_direction + '_symbol'] = this.path1_symbol;\n }\n\n if (this.path2_direction) {\n this[this.path2_direction + '_symbol'] = this.path2_symbol;\n }\n\n if (this.path3_direction) {\n this[this.path3_direction + '_symbol'] = this.path3_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.top_symbol) {\n var topPoint = this.getTop();\n\n if (!this.top_symbol.isPositioned) {\n this.top_symbol.shiftY(this.getY() - this.top_symbol.height - lineLength);\n this.top_symbol.setX(topPoint.x + this.top_symbol.width);\n this.top_symbol.isPositioned = true;\n\n this.top_symbol.render();\n }\n }\n\n var self = this;\n\n if (this.left_symbol) {\n var leftPoint = this.getLeft();\n\n if (!this.left_symbol.isPositioned) {\n this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n if (self.left_symbol.symbolType === 'end') return;\n self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.left_symbol.isPositioned = true;\n\n this.left_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n if (self.right_symbol.symbolType === 'end') return;\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nParallel.prototype.renderLines = function() {\n if (this.path1_symbol) {\n this.drawLineTo(this.path1_symbol, this.path1_annotation, this.path1_direction);\n }\n\n if (this.path2_symbol) {\n this.drawLineTo(this.path2_symbol, this.path2_annotation, this.path2_direction);\n }\n\n if (this.path3_symbol) {\n this.drawLineTo(this.path3_symbol, this.path3_annotation, this.path3_direction);\n }\n};\n\nmodule.exports = Parallel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.parallel.js\n// module id = 6\n// module chunks = 0","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\nvar Parallel = require('./flowchart.symbol.parallel');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if (symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else if (symbol instanceof(Parallel)) {\n symbol.path1 = function(nextSymbol) {\n symbol.path1_symbol = nextSymbol;\n if (symbol.path2_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.path2 = function(nextSymbol) {\n symbol.path2_symbol = nextSymbol;\n if (symbol.path3_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.path3 = function(nextSymbol) {\n symbol.path3_symbol = nextSymbol;\n if (symbol.path1_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n minX = 0,\n minY = 0,\n symbol,\n line;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n var x;\n var y;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n var leftX = symbol.getX()\n x = leftX + symbol.width;\n y = symbol.getY() + symbol.height;\n if (leftX < minX) {\n minX = leftX;\n }\n if (x > maxX) {\n maxX = x;\n }\n if (y > maxY) {\n maxY = y;\n }\n }\n\n for (i = 0, len = this.lines.length; i < len; i++) {\n line = this.lines[i].getBBox();\n x = line.x;\n y = line.y;\n var x2 = line.x2;\n var y2 = line.y2;\n if (x < minX) {\n minX = x;\n }\n if (y < minY) {\n minY = y;\n }\n if (x2 > maxX) {\n maxX = x2;\n }\n if (y2 > maxY) {\n maxY = y2;\n }\n }\n\n var scale = this.options['scale'];\n var lineWidth = this.options['line-width'];\n\n if (this.minXFromSymbols < minX) minX = this.minXFromSymbols;\n\n if (minX < 0) minX -= lineWidth;\n if (minY < 0) minY -= lineWidth;\n\n var width = maxX + lineWidth - minX;\n var height = maxY + lineWidth - minY;\n\n this.paper.setSize(width * scale, height * scale);\n this.paper.setViewBox(minX, minY, width, height, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode && paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.chart.js\n// module id = 7\n// module chunks = 0","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {},\n 'parallel': {}\n } //,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.defaults.js\n// module id = 8\n// module chunks = 0","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.shim.js\n// module id = 9\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.end.js\n// module id = 10\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n this.symbol = symbol\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.inputoutput.js\n// module id = 11\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.operation.js\n// module id = 12\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.start.js\n// module id = 13\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.subroutine.js\n// module id = 14\n// module chunks = 0","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\n\t(function( $ ) {\n\t\tfunction paramFit(needle, haystack) {\n\t\t\treturn needle == haystack ||\n\t\t\t( Array.isArray(haystack) && (haystack.includes(needle) || haystack.includes(Number(needle)) ))\n\t\t}\n\t\tvar methods = {\n\t\t\tinit : function(options) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tthis.chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tthis.chart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t},\n\t\t\tsetFlowStateByParam : function(param, paramValue, newFlowState) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar chart = this.chart;\n\n\t\t\t\t\t// @todo this should be part of Symbol API\n\t\t\t\t\tvar nextSymbolKeys = ['next', 'yes', 'no', 'path1', 'path2', 'path3'];\n\n\t\t\t\t\tfor (var property in chart.symbols) {\n\t\t\t\t\t\tif (chart.symbols.hasOwnProperty(property)) {\n\t\t\t\t\t\t\tvar symbol = chart.symbols[property];\n\t\t\t\t\t\t\tvar val = symbol.params[param];\n\t\t\t\t\t\t\tif (paramFit(val, paramValue)) {\n\t\t\t\t\t\t\t\tsymbol.flowstate = newFlowState;\n\t\t\t\t\t\t\t\tfor (var nski = 0; nski < nextSymbolKeys.length; nski++) {\n\t\t\t\t\t\t\t\t\tvar nextSymbolKey = nextSymbolKeys[nski];\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey] &&\n\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey]['params'] &&\n\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey]['params'][param] &&\n\t\t\t\t\t\t\t\t\t\tparamFit(symbol[nextSymbolKey]['params'][param], paramValue)\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tsymbol.lineStyle[symbol[nextSymbolKey]['key']] = {stroke: chart.options()['flowstate'][newFlowState]['fill']};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tchart.clean();\n\t\t\t\t\tchart.drawSVG(this);\n\t\t\t\t});\n\n\t\t\t},\n\t\t\tclearFlowState: function () {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar chart = this.chart;\n\n\t\t\t\t\tfor (var property in chart.symbols) {\n\t\t\t\t\t\tif (chart.symbols.hasOwnProperty(property)) {\n\t\t\t\t\t\t\tvar node = chart.symbols[property];\n\t\t\t\t\t\t\tnode.flowstate = '';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tchart.clean();\n\t\t\t\t\tchart.drawSVG(this);\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\t$.fn.flowChart = function(methodOrOptions) {\n\t\t\tif ( methods[methodOrOptions] ) {\n\t\t\t\treturn methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 ));\n\t\t\t} else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ) {\n\t\t\t\t// Default to \"init\"\n\t\t\t\treturn methods.init.apply( this, arguments );\n\t\t\t} else {\n\t\t\t\t$.error( 'Method ' + methodOrOptions + ' does not exist on jQuery.flowChart' );\n\t\t\t}\n\t\t};\n\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/jquery-plugin.js\n// module id = 15\n// module chunks = 0","module.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"Raphael\"\n// module id = 16\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.min.js","webpack:///webpack/bootstrap 4f9d779180e36d518402","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.symbol.parallel.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_16__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","lineStyle","key","leftLines","rightLines","topLines","bottomLines","params","next_direction","next","undefined","text","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","function","cursor","addEventListener","evt","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","self","lineLength","rightPoint","isPositioned","shift","symb","hasSymbolUnder","len","diff","Math","abs","leftPoint","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","yOffset","right","bottom","top","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","max","rightStart","topEnd","bottomStart","diffX","leftStart","topStart","leftEnd","rightEnd","l","llen","lines","otherLine","ePath","lPath","iP","lenP","newPath","line1_from_x","line1_from_y","line1_to_x","line1_to_y","lP","lenlP","newLinePath","line2_from_x","line2_from_y","line2_to_x","line2_to_y","res","onLine1","onLine2","newSegment","splice","minXFromSymbols","maxXFromLine","drawPath","location","points","path","pathValues","from","to","toString","arrow-end","centerText","textPath","textAnchor","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getStyle","s","startIndex","endIndex","getSymbValue","getSymbol","getNextPath","flowSymb","getAnnotation","tmp","tmp_split","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Parallel","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","path1","path2","path3","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","parts","match","entries","entry","sub","join","txtAndState","pop","ann","flowSymbols","iS","lenS","symbVal","realSymb","direction","condOpt","yes_annotation","no_annotation","path1_annotation","path2_annotation","path3_annotation","nextSymb","lineStyleSymbols","iSS","lenSS","curSymb","nextSymbol","JSON","textMargin","yes_direction","direction_yes","no_direction","direction_no","startX","startY","yes_symbol","no_symbol","bottom_symbol","right_symbol","left_symbol","rect","path1_direction","path2_direction","path3_direction","direction_next","direction_path1","direction_path2","direction_path3","path1_symbol","path2_symbol","path3_symbol","top_symbol","topPoint","Raphael","handle","flowChart","maxHeight","maxY","minX","minY","leftX","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","roundness","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","parallel","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","innerWrap","jQuery","$","paramFit","needle","haystack","isArray","includes","methods","init","each","$this","html","setFlowStateByParam","param","paramValue","newFlowState","nextSymbolKeys","property","hasOwnProperty","val","nski","nextSymbolKey","clearFlowState","fn","methodOrOptions","apply","slice","error"],"mappings":"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","file":"flowchart.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_16__) {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_16__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 9);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 15);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ }),\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ (function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ }),\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t this.lineStyle = (options.lineStyle || {});\n\t this.key = (options.key || '');\n\t this.leftLines = [];\n\t this.rightLines = [];\n\t this.topLines = [];\n\t this.bottomLines = [];\n\t this.params = options.params;\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t \n\t //ndrqu Add click function with event and options params\n\t if (options.function) { \n\t this.text.attr({ 'cursor' : 'pointer' });\n\t\n\t this.text.node.addEventListener(\"click\", function(evt) {\n\t window[options.function](evt,options);\n\t }, false);\n\t }\n\t\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t symbol.node.setAttribute('ry', this.getAttr('roundness'));\n\t symbol.node.setAttribute('rx', this.getAttr('roundness'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t\n\t //ndrqu Add click function with event and options params\n\t if (options.function) { \n\t symbol.node.addEventListener(\"click\", function(evt) {\n\t window[options.function](evt,options);\n\t }, false);\n\t symbol.attr({ 'cursor' : 'pointer' });\n\t }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var self = this;\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.next.symbolType === 'end') return;\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else if (this.next_direction === 'left') {\n\t\n\t var leftPoint = this.getLeft();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.setY(leftPoint.y - this.next.height/2);\n\t this.next.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.next.symbolType === 'end') return;\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, this.getAttr('arrow-text') || '', this.next_direction);\n\t } else {\n\t this.drawLineTo(this.next, this.getAttr('arrow-text') || '');\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n\t if (this.connectedTo.indexOf(symbol) < 0) {\n\t this.connectedTo.push(symbol);\n\t }\n\t\n\t var x = this.getCenter().x,\n\t y = this.getCenter().y,\n\t right = this.getRight(),\n\t bottom = this.getBottom(),\n\t top = this.getTop(),\n\t left = this.getLeft();\n\t\n\t var symbolX = symbol.getCenter().x,\n\t symbolY = symbol.getCenter().y,\n\t symbolTop = symbol.getTop(),\n\t symbolRight = symbol.getRight(),\n\t symbolLeft = symbol.getLeft();\n\t\n\t var isOnSameColumn = x === symbolX,\n\t isOnSameLine = y === symbolY,\n\t isUnder = y < symbolY,\n\t isUpper = y > symbolY || this === symbol,\n\t isLeft = x > symbolX,\n\t isRight = x < symbolX;\n\t\n\t var maxX = 0,\n\t line,\n\t yOffset,\n\t lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t if (symbol.topLines.length === 0 && this.bottomLines.length === 0) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\n\t } else {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t line = drawLine(this.chart, bottom, [\n\t {x: symbolTop.x, y: symbolTop.y - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n\t if (symbol.leftLines.length === 0 && this.rightLines.length === 0) {\n\t line = drawLine(this.chart, right, symbolLeft, text);\n\t } else {\n\t yOffset = Math.max(symbol.leftLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x, y: right.y - yOffset},\n\t {x: right.x, y: symbolLeft.y - yOffset},\n\t {x: symbolLeft.x, y: symbolLeft.y - yOffset},\n\t {x: symbolLeft.x, y: symbolLeft.y}\n\t ], text);\n\t }\n\t this.rightLines.push(line);\n\t symbol.leftLines.push(line);\n\t this.rightStart = true;\n\t symbol.leftEnd = true;\n\t maxX = symbolLeft.x;\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n\t if (symbol.rightLines.length === 0 && this.leftLines.length === 0) {\n\t line = drawLine(this.chart, left, symbolRight, text);\n\t } else {\n\t yOffset = Math.max(symbol.rightLines.length, this.leftLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x, y: right.y - yOffset},\n\t {x: right.x, y: symbolRight.y - yOffset},\n\t {x: symbolRight.x, y: symbolRight.y - yOffset},\n\t {x: symbolRight.x, y: symbolRight.y}\n\t ], text);\n\t }\n\t this.leftLines.push(line);\n\t symbol.rightLines.push(line);\n\t this.leftStart = true;\n\t symbol.rightEnd = true;\n\t maxX = symbolRight.x;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n\t yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y - yOffset},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightLines.push(line);\n\t symbol.topLines.push(line);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n\t yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y - yOffset},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightLines.push(line);\n\t symbol.topLines.push(line);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2 - yOffset},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t } else {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((!origin || origin === 'bottom') && isRight && isUnder) {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t if (symbolTop.x > maxX) maxX = symbolTop.x;\n\t } else if ((!origin || origin === 'bottom') && isRight) {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2 - yOffset},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((origin && origin === 'right') && isLeft) {\n\t yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightLines.push(line);\n\t symbol.topLines.push(line);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'right') && isRight) {\n\t yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - yOffset}\n\t ], text);\n\t this.rightLines.push(line);\n\t symbol.topLines.push(line);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2 - yOffset},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + lineLength/2;\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n\t var diffX = left.x - lineLength/2;\n\t if (symbolLeft.x < left.x) {\n\t diffX = symbolLeft.x - lineLength/2;\n\t }\n\t yOffset = Math.max(symbol.topLines.length, this.leftLines.length) * 10;\n\t line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y - yOffset},\n\t {x: diffX, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftLines.push(line);\n\t symbol.topLines.push(line);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\n\t yOffset = Math.max(symbol.topLines.length, this.leftLines.length) * 10;\n\t line = drawLine(this.chart, left, [\n\t {x: symbolTop.x + (left.x - symbolTop.x)/2, y: left.y},\n\t {x: symbolTop.x + (left.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftLines.push(line);\n\t symbol.topLines.push(line);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'top')) {\n\t yOffset = Math.max(symbol.topLines.length, this.topLines.length) * 10;\n\t line = drawLine(this.chart, top, [\n\t {x: top.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.topLines.push(line);\n\t symbol.topLines.push(line);\n\t this.topStart = true;\n\t symbol.topEnd = true;\n\t maxX = top.x;\n\t }\n\t\n\t //update line style\n\t if (this.lineStyle[symbol.key] && line){\n\t line.attr(this.lineStyle[symbol.key]);\n\t }\n\t\n\t if (line) {\n\t for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n\t var otherLine = this.chart.lines[l];\n\t\n\t var ePath = otherLine.attr('path'),\n\t lPath = line.attr('path');\n\t\n\t for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n\t var newPath = [];\n\t newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n\t newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\t\n\t var line1_from_x = newPath[0][1];\n\t var line1_from_y = newPath[0][2];\n\t var line1_to_x = newPath[1][1];\n\t var line1_to_y = newPath[1][2];\n\t\n\t for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n\t var newLinePath = [];\n\t newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n\t newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\t\n\t var line2_from_x = newLinePath[0][1];\n\t var line2_from_y = newLinePath[0][2];\n\t var line2_to_x = newLinePath[1][1];\n\t var line2_to_y = newLinePath[1][2];\n\t\n\t var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n\t if (res.onLine1 && res.onLine2) {\n\t\n\t var newSegment;\n\t if (line2_from_y === line2_to_y) {\n\t if (line2_from_x > line2_to_x) {\n\t newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t } else {\n\t if (line2_from_y > line2_to_y) {\n\t newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t }\n\t\n\t lP += 2;\n\t }\n\t }\n\t }\n\t }\n\t\n\t this.chart.lines.push(line);\n\t if (this.chart.minXFromSymbols === undefined || this.chart.minXFromSymbols > left.x) {\n\t this.chart.minXFromSymbols = left.x;\n\t }\n\t }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ }),\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ (function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t var textAnchor = 'start';\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t if (from.x > firstTo.x) {\n\t x -= chart.options['text-margin']/2;\n\t textAnchor = 'end';\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t }\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t if (from.y > firstTo.y) {\n\t y -= chart.options['text-margin']*2;\n\t }\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': textAnchor,\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ }),\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 7);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 13);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 10);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 12);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 11);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 14);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\tvar Parallel = __webpack_require__(/*! ./flowchart.symbol.parallel */ 6);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s);\n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t case 'parallel':\n\t dispSymbols[s.key] = new Parallel(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else if (prevDisp instanceof(Parallel)) {\n\t if (prev.path1 === s) {\n\t prevDisp.path1(dispSymb);\n\t }\n\t if (prev.path2 === s) {\n\t prevDisp.path2(dispSymb);\n\t }\n\t if (prev.path3 === s) {\n\t prevDisp.path3(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (dispSymb instanceof(Parallel)) {\n\t if (s.path1) {\n\t constructChart(s.path1, dispSymb, s);\n\t }\n\t if (s.path2) {\n\t constructChart(s.path2, dispSymb, s);\n\t }\n\t if (s.path3) {\n\t constructChart(s.path3, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t },\n\t options: function() {\n\t return this.diagram.options;\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if (prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getStyle(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '{}';\n\t }\n\t\n\t function getSymbValue(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '';\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)];\n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t \n\t function getAnnotation(s) {\n\t\tvar startIndex = s.indexOf(\"(\") + 1, endIndex = s.indexOf(\")\");\n\t\tvar tmp = s.substring(startIndex, endIndex);\n\t\tif(tmp.indexOf(\",\") > 0) { tmp = tmp.substring(0, tmp.indexOf(\",\")); }\n\t\tvar tmp_split = tmp.split(\"@\");\n\t\tif(tmp_split.length > 1)\n\t\t\treturn startIndex >= 0 && endIndex >= 0 ? tmp_split[1] : \"\";\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0].trim();\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0].replace(/\\(.*\\)/, ''),\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null,\n\t function: null,\n\t lineStyle: {},\n\t params: {}\n\t };\n\t\n\t //parse parameters\n\t var params = parts[0].match(/\\((.*)\\)/);\n\t if (params && params.length > 1){\n\t var entries = params[1].split(',');\n\t for(var i = 0; i < entries.length; i++) {\n\t var entry = entries[i].split('=');\n\t if (entry.length == 2) {\n\t symbol.params[entry[0]] = entry[1];\n\t }\n\t }\n\t }\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':$') >= 0) {\n\t sub = symbol.text.split(':$');\n\t symbol.text = sub.shift();\n\t symbol.function = sub.join(':$');\n\t } else if (symbol.symbolType.indexOf(':$') >= 0) {\n\t sub = symbol.symbolType.split(':$');\n\t symbol.symbolType = sub.shift();\n\t symbol.function = sub.join(':$');\n\t } else if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t var ann = getAnnotation(line);\n\t if (ann) {\n\t line = line.replace('@' + ann, ''); \n\t }\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var iS = 0, lenS = flowSymbols.length; iS < lenS; iS++) {\n\t var flowSymb = flowSymbols[iS];\n\t var symbVal = getSymbValue(flowSymb);\n\t\n\t if (symbVal === 'true' || symbVal === 'false') {\n\t // map true or false to yes or no respectively\n\t flowSymb = flowSymb.replace('true', 'yes');\n\t flowSymb = flowSymb.replace('false', 'no');\n\t }\n\t \n\t var next = getNextPath(flowSymb);\n\t var realSymb = getSymbol(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (ann) {\n\t if (realSymb.symbolType === 'condition') {\n\t if (next === \"yes\" || next === \"true\") {\n\t realSymb.yes_annotation = ann;\n\t } else {\n\t realSymb.no_annotation = ann;\n\t }\n\t } else if (realSymb.symbolType === 'parallel') {\n\t if (next === 'path1') {\n\t realSymb.path1_annotation = ann;\n\t } else if (next === 'path2') {\n\t realSymb.path2_annotation = ann;\n\t } else if (next === 'path3') {\n\t realSymb.path3_annotation = ann;\n\t }\n\t }\n\t ann = null;\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (iS + 1 < lenS) {\n\t var nextSymb = flowSymbols[iS + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t } else if (line.indexOf('@>') >= 0) {\n\t\n\t // line style\n\t var lineStyleSymbols = line.split('@>');\n\t for (var iSS = 0, lenSS = lineStyleSymbols.length; iSS < lenSS; iSS++) {\n\t if ((iSS + 1) !== lenSS) {\n\t var curSymb = getSymbol(lineStyleSymbols[iSS]);\n\t var nextSymbol = getSymbol(lineStyleSymbols[iSS+1]);\n\t\n\t curSymb['lineStyle'][nextSymbol.key] = JSON.parse(getStyle(lineStyleSymbols[iSS + 1]));\n\t }\n\t }\n\t }\n\t\n\t }\n\t return chart;\n\t}\n\t\n\tmodule.exports = parse;\n\n\n/***/ }),\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction Condition(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.yes_annotation = options.yes_annotation;\n\t this.no_annotation = options.no_annotation;\n\t this.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = options.direction_yes;\n\t this.no_direction = options.direction_no;\n\t if (!this.no_direction && this.yes_direction === 'right') {\n\t this.no_direction = 'bottom';\n\t } else if (!this.yes_direction && this.no_direction === 'bottom') {\n\t this.yes_direction = 'right'\n\t }\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t this.symbol = symbol\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t var self = this;\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.right_symbol.symbolType === 'end') return;\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t \n\t if (this.left_symbol) {\n\t var leftPoint = this.getLeft();\n\t \n\t if (!this.left_symbol.isPositioned) {\n\t this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n\t this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t \n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t \n\t if (hasSymbolUnder) {\n\t if (self.left_symbol.symbolType === 'end') return;\n\t self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t \n\t this.left_symbol.isPositioned = true;\n\t \n\t this.left_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.yes_annotation ? this.yes_annotation : this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.no_annotation ? this.no_annotation : this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ }),\n/* 6 */\n/*!******************************************!*\\\n !*** ./src/flowchart.symbol.parallel.js ***!\n \\******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Parallel(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t this.path1_annotation = options.path1_annotation || '';\n\t this.path2_annotation = options.path2_annotation || '';\n\t this.path3_annotation = options.path3_annotation || '';\n\t this.textMargin = this.getAttr('text-margin');\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t this.params = options.params;\n\t if (options.direction_next === 'path1' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path2' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path3' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t\n\t if (options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path1 === 'right') {\n\t this.path2_direction = 'bottom';\n\t this.path1_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path1 === 'top') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'top';\n\t this.path3_direction = 'bottom';\n\t } else if (options.direction_path1 === 'left') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'left';\n\t this.path3_direction = 'bottom';\n\t } else {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'left';\n\t this.path3_direction = 'right';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'top';\n\t this.path3_direction = 'right';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'left';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else {\n\t this.path1_direction = options.direction_path1;\n\t this.path2_direction = options.direction_path2;\n\t this.path3_direction = options.direction_path3;\n\t }\n\t\n\t this.path1_direction = this.path1_direction || 'bottom';\n\t this.path2_direction = this.path2_direction || 'right';\n\t this.path3_direction = this.path3_direction || 'top';\n\t\n\t this.initialize();\n\t}\n\tinherits(Parallel, Symbol);\n\t\n\tParallel.prototype.render = function() {\n\t if (this.path1_direction) {\n\t this[this.path1_direction + '_symbol'] = this.path1_symbol;\n\t }\n\t\n\t if (this.path2_direction) {\n\t this[this.path2_direction + '_symbol'] = this.path2_symbol;\n\t }\n\t\n\t if (this.path3_direction) {\n\t this[this.path3_direction + '_symbol'] = this.path3_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.top_symbol) {\n\t var topPoint = this.getTop();\n\t\n\t if (!this.top_symbol.isPositioned) {\n\t this.top_symbol.shiftY(this.getY() - this.top_symbol.height - lineLength);\n\t this.top_symbol.setX(topPoint.x + this.top_symbol.width);\n\t this.top_symbol.isPositioned = true;\n\t\n\t this.top_symbol.render();\n\t }\n\t }\n\t\n\t var self = this;\n\t\n\t if (this.left_symbol) {\n\t var leftPoint = this.getLeft();\n\t\n\t if (!this.left_symbol.isPositioned) {\n\t this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n\t this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.left_symbol.symbolType === 'end') return;\n\t self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.left_symbol.isPositioned = true;\n\t\n\t this.left_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.right_symbol.symbolType === 'end') return;\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tParallel.prototype.renderLines = function() {\n\t if (this.path1_symbol) {\n\t this.drawLineTo(this.path1_symbol, this.path1_annotation, this.path1_direction);\n\t }\n\t\n\t if (this.path2_symbol) {\n\t this.drawLineTo(this.path2_symbol, this.path2_annotation, this.path2_direction);\n\t }\n\t\n\t if (this.path3_symbol) {\n\t this.drawLineTo(this.path3_symbol, this.path3_annotation, this.path3_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Parallel;\n\n/***/ }),\n/* 7 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 16);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 8);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\tvar Parallel = __webpack_require__(/*! ./flowchart.symbol.parallel */ 6);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if (symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else if (symbol instanceof(Parallel)) {\n\t symbol.path1 = function(nextSymbol) {\n\t symbol.path1_symbol = nextSymbol;\n\t if (symbol.path2_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.path2 = function(nextSymbol) {\n\t symbol.path2_symbol = nextSymbol;\n\t if (symbol.path3_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.path3 = function(nextSymbol) {\n\t symbol.path3_symbol = nextSymbol;\n\t if (symbol.path1_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t minX = 0,\n\t minY = 0,\n\t symbol,\n\t line;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t var x;\n\t var y;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t var leftX = symbol.getX()\n\t x = leftX + symbol.width;\n\t y = symbol.getY() + symbol.height;\n\t if (leftX < minX) {\n\t minX = leftX;\n\t }\n\t if (x > maxX) {\n\t maxX = x;\n\t }\n\t if (y > maxY) {\n\t maxY = y;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.lines.length; i < len; i++) {\n\t line = this.lines[i].getBBox();\n\t x = line.x;\n\t y = line.y;\n\t var x2 = line.x2;\n\t var y2 = line.y2;\n\t if (x < minX) {\n\t minX = x;\n\t }\n\t if (y < minY) {\n\t minY = y;\n\t }\n\t if (x2 > maxX) {\n\t maxX = x2;\n\t }\n\t if (y2 > maxY) {\n\t maxY = y2;\n\t }\n\t }\n\t\n\t var scale = this.options['scale'];\n\t var lineWidth = this.options['line-width'];\n\t\n\t if (this.minXFromSymbols < minX) minX = this.minXFromSymbols;\n\t\n\t if (minX < 0) minX -= lineWidth;\n\t if (minY < 0) minY -= lineWidth;\n\t\n\t var width = maxX + lineWidth - minX;\n\t var height = maxY + lineWidth - minY;\n\t\n\t this.paper.setSize(width * scale, height * scale);\n\t this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode && paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n/***/ }),\n/* 8 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ (function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'roundness': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {},\n\t 'parallel': {}\n\t } //,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n/***/ }),\n/* 9 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ (function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ }),\n/* 10 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ }),\n/* 11 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t this.symbol = symbol\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ }),\n/* 12 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ }),\n/* 13 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ }),\n/* 14 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ }),\n/* 15 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\n\t\t(function( $ ) {\n\t\t\tfunction paramFit(needle, haystack) {\n\t\t\t\treturn needle == haystack ||\n\t\t\t\t( Array.isArray(haystack) && (haystack.includes(needle) || haystack.includes(Number(needle)) ))\n\t\t\t}\n\t\t\tvar methods = {\n\t\t\t\tinit : function(options) {\n\t\t\t\t\treturn this.each(function() {\n\t\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\t\tthis.chart = parse($this.text());\n\t\t\t\t\t\t$this.html('');\n\t\t\t\t\t\tthis.chart.drawSVG(this, options);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tsetFlowStateByParam : function(param, paramValue, newFlowState) {\n\t\t\t\t\treturn this.each(function() {\n\t\t\t\t\t\tvar chart = this.chart;\n\t\n\t\t\t\t\t\t// @todo this should be part of Symbol API\n\t\t\t\t\t\tvar nextSymbolKeys = ['next', 'yes', 'no', 'path1', 'path2', 'path3'];\n\t\n\t\t\t\t\t\tfor (var property in chart.symbols) {\n\t\t\t\t\t\t\tif (chart.symbols.hasOwnProperty(property)) {\n\t\t\t\t\t\t\t\tvar symbol = chart.symbols[property];\n\t\t\t\t\t\t\t\tvar val = symbol.params[param];\n\t\t\t\t\t\t\t\tif (paramFit(val, paramValue)) {\n\t\t\t\t\t\t\t\t\tsymbol.flowstate = newFlowState;\n\t\t\t\t\t\t\t\t\tfor (var nski = 0; nski < nextSymbolKeys.length; nski++) {\n\t\t\t\t\t\t\t\t\t\tvar nextSymbolKey = nextSymbolKeys[nski];\n\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey] &&\n\t\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey]['params'] &&\n\t\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey]['params'][param] &&\n\t\t\t\t\t\t\t\t\t\t\tparamFit(symbol[nextSymbolKey]['params'][param], paramValue)\n\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\tsymbol.lineStyle[symbol[nextSymbolKey]['key']] = {stroke: chart.options()['flowstate'][newFlowState]['fill']};\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tchart.clean();\n\t\t\t\t\t\tchart.drawSVG(this);\n\t\t\t\t\t});\n\t\n\t\t\t\t},\n\t\t\t\tclearFlowState: function () {\n\t\t\t\t\treturn this.each(function() {\n\t\t\t\t\t\tvar chart = this.chart;\n\t\n\t\t\t\t\t\tfor (var property in chart.symbols) {\n\t\t\t\t\t\t\tif (chart.symbols.hasOwnProperty(property)) {\n\t\t\t\t\t\t\t\tvar node = chart.symbols[property];\n\t\t\t\t\t\t\t\tnode.flowstate = '';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tchart.clean();\n\t\t\t\t\t\tchart.drawSVG(this);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t\t$.fn.flowChart = function(methodOrOptions) {\n\t\t\t\tif ( methods[methodOrOptions] ) {\n\t\t\t\t\treturn methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 ));\n\t\t\t\t} else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ) {\n\t\t\t\t\t// Default to \"init\"\n\t\t\t\t\treturn methods.init.apply( this, arguments );\n\t\t\t\t} else {\n\t\t\t\t\t$.error( 'Method ' + methodOrOptions + ' does not exist on jQuery.flowChart' );\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ }),\n/* 16 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ (function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// flowchart.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 4f9d779180e36d518402","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./index.js\n// module id = 0\n// module chunks = 0","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.helpers.js\n// module id = 1\n// module chunks = 0","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n this.lineStyle = (options.lineStyle || {});\n this.key = (options.key || '');\n this.leftLines = [];\n this.rightLines = [];\n this.topLines = [];\n this.bottomLines = [];\n this.params = options.params;\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n \n //ndrqu Add click function with event and options params\n if (options.function) { \n this.text.attr({ 'cursor' : 'pointer' });\n\n this.text.node.addEventListener(\"click\", function(evt) {\n window[options.function](evt,options);\n }, false);\n }\n\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n symbol.node.setAttribute('ry', this.getAttr('roundness'));\n symbol.node.setAttribute('rx', this.getAttr('roundness'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n\n //ndrqu Add click function with event and options params\n if (options.function) { \n symbol.node.addEventListener(\"click\", function(evt) {\n window[options.function](evt,options);\n }, false);\n symbol.attr({ 'cursor' : 'pointer' });\n }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var self = this;\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n if (self.next.symbolType === 'end') return;\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else if (this.next_direction === 'left') {\n\n var leftPoint = this.getLeft();\n\n if (!this.next.isPositioned) {\n this.next.setY(leftPoint.y - this.next.height/2);\n this.next.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n if (self.next.symbolType === 'end') return;\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, this.getAttr('arrow-text') || '', this.next_direction);\n } else {\n this.drawLineTo(this.next, this.getAttr('arrow-text') || '');\n }\n }\n};\n\nSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n if (this.connectedTo.indexOf(symbol) < 0) {\n this.connectedTo.push(symbol);\n }\n\n var x = this.getCenter().x,\n y = this.getCenter().y,\n right = this.getRight(),\n bottom = this.getBottom(),\n top = this.getTop(),\n left = this.getLeft();\n\n var symbolX = symbol.getCenter().x,\n symbolY = symbol.getCenter().y,\n symbolTop = symbol.getTop(),\n symbolRight = symbol.getRight(),\n symbolLeft = symbol.getLeft();\n\n var isOnSameColumn = x === symbolX,\n isOnSameLine = y === symbolY,\n isUnder = y < symbolY,\n isUpper = y > symbolY || this === symbol,\n isLeft = x > symbolX,\n isRight = x < symbolX;\n\n var maxX = 0,\n line,\n yOffset,\n lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n if (symbol.topLines.length === 0 && this.bottomLines.length === 0) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n } else {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n line = drawLine(this.chart, bottom, [\n {x: symbolTop.x, y: symbolTop.y - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n if (symbol.leftLines.length === 0 && this.rightLines.length === 0) {\n line = drawLine(this.chart, right, symbolLeft, text);\n } else {\n yOffset = Math.max(symbol.leftLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x, y: right.y - yOffset},\n {x: right.x, y: symbolLeft.y - yOffset},\n {x: symbolLeft.x, y: symbolLeft.y - yOffset},\n {x: symbolLeft.x, y: symbolLeft.y}\n ], text);\n }\n this.rightLines.push(line);\n symbol.leftLines.push(line);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n if (symbol.rightLines.length === 0 && this.leftLines.length === 0) {\n line = drawLine(this.chart, left, symbolRight, text);\n } else {\n yOffset = Math.max(symbol.rightLines.length, this.leftLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x, y: right.y - yOffset},\n {x: right.x, y: symbolRight.y - yOffset},\n {x: symbolRight.x, y: symbolRight.y - yOffset},\n {x: symbolRight.x, y: symbolRight.y}\n ], text);\n }\n this.leftLines.push(line);\n symbol.rightLines.push(line);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y - yOffset},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightLines.push(line);\n symbol.topLines.push(line);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y - yOffset},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightLines.push(line);\n symbol.topLines.push(line);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2 - yOffset},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n } else {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((!origin || origin === 'bottom') && isRight && isUnder) {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n if (symbolTop.x > maxX) maxX = symbolTop.x;\n } else if ((!origin || origin === 'bottom') && isRight) {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2 - yOffset},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((origin && origin === 'right') && isLeft) {\n yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightLines.push(line);\n symbol.topLines.push(line);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y - yOffset},\n {x: symbolTop.x, y: symbolTop.y - yOffset}\n ], text);\n this.rightLines.push(line);\n symbol.topLines.push(line);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2 - yOffset},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + lineLength/2;\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n var diffX = left.x - lineLength/2;\n if (symbolLeft.x < left.x) {\n diffX = symbolLeft.x - lineLength/2;\n }\n yOffset = Math.max(symbol.topLines.length, this.leftLines.length) * 10;\n line = drawLine(this.chart, left, [\n {x: diffX, y: left.y - yOffset},\n {x: diffX, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftLines.push(line);\n symbol.topLines.push(line);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\n yOffset = Math.max(symbol.topLines.length, this.leftLines.length) * 10;\n line = drawLine(this.chart, left, [\n {x: symbolTop.x + (left.x - symbolTop.x)/2, y: left.y},\n {x: symbolTop.x + (left.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftLines.push(line);\n symbol.topLines.push(line);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'top')) {\n yOffset = Math.max(symbol.topLines.length, this.topLines.length) * 10;\n line = drawLine(this.chart, top, [\n {x: top.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.topLines.push(line);\n symbol.topLines.push(line);\n this.topStart = true;\n symbol.topEnd = true;\n maxX = top.x;\n }\n\n //update line style\n if (this.lineStyle[symbol.key] && line){\n line.attr(this.lineStyle[symbol.key]);\n }\n\n if (line) {\n for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n var otherLine = this.chart.lines[l];\n\n var ePath = otherLine.attr('path'),\n lPath = line.attr('path');\n\n for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n var newPath = [];\n newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\n var line1_from_x = newPath[0][1];\n var line1_from_y = newPath[0][2];\n var line1_to_x = newPath[1][1];\n var line1_to_y = newPath[1][2];\n\n for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n var newLinePath = [];\n newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\n var line2_from_x = newLinePath[0][1];\n var line2_from_y = newLinePath[0][2];\n var line2_to_x = newLinePath[1][1];\n var line2_to_y = newLinePath[1][2];\n\n var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n if (res.onLine1 && res.onLine2) {\n\n var newSegment;\n if (line2_from_y === line2_to_y) {\n if (line2_from_x > line2_to_x) {\n newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n } else {\n if (line2_from_y > line2_to_y) {\n newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n }\n\n lP += 2;\n }\n }\n }\n }\n\n this.chart.lines.push(line);\n if (this.chart.minXFromSymbols === undefined || this.chart.minXFromSymbols > left.x) {\n this.chart.minXFromSymbols = left.x;\n }\n }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.js\n// module id = 2\n// module chunks = 0","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n var textAnchor = 'start';\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n if (from.x > firstTo.x) {\n x -= chart.options['text-margin']/2;\n textAnchor = 'end';\n } else {\n x += chart.options['text-margin']/2;\n }\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n if (from.y > firstTo.y) {\n y -= chart.options['text-margin']*2;\n }\n }\n }\n\n textPath.attr({\n 'text-anchor': textAnchor,\n 'font-size': chart.options['font-size'],\n 'fill': chart.options['font-color'],\n x: x,\n y: y\n });\n\n if (font) textPath.attr({ 'font': font });\n if (fontF) textPath.attr({ 'font-family': fontF });\n if (fontW) textPath.attr({ 'font-weight': fontW });\n }\n\n return line;\n}\n\nfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n var denominator, a, b, numerator1, numerator2, result = {\n x: null,\n y: null,\n onLine1: false,\n onLine2: false\n };\n denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n if (denominator === 0) {\n return result;\n }\n a = line1StartY - line2StartY;\n b = line1StartX - line2StartX;\n numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n a = numerator1 / denominator;\n b = numerator2 / denominator;\n\n // if we cast these lines infinitely in both directions, they intersect here:\n result.x = line1StartX + (a * (line1EndX - line1StartX));\n result.y = line1StartY + (a * (line1EndY - line1StartY));\n /*\n // it is worth noting that this should be the same as:\n x = line2StartX + (b * (line2EndX - line2StartX));\n y = line2StartX + (b * (line2EndY - line2StartY));\n */\n // if line1 is a segment and line2 is infinite, they intersect if:\n if (a > 0 && a < 1) {\n result.onLine1 = true;\n }\n // if line2 is a segment and line1 is infinite, they intersect if:\n if (b > 0 && b < 1) {\n result.onLine2 = true;\n }\n // if line1 and line2 are segments, they intersect if both of the above are true\n return result;\n}\n\nmodule.exports = {\n\tdrawPath: drawPath,\n\tdrawLine: drawLine,\n\tcheckLineIntersection: checkLineIntersection\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.functions.js\n// module id = 3\n// module chunks = 0","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\nvar Parallel = require('./flowchart.symbol.parallel');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s);\n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n case 'parallel':\n dispSymbols[s.key] = new Parallel(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else if (prevDisp instanceof(Parallel)) {\n if (prev.path1 === s) {\n prevDisp.path1(dispSymb);\n }\n if (prev.path2 === s) {\n prevDisp.path2(dispSymb);\n }\n if (prev.path3 === s) {\n prevDisp.path3(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (dispSymb instanceof(Parallel)) {\n if (s.path1) {\n constructChart(s.path1, dispSymb, s);\n }\n if (s.path2) {\n constructChart(s.path2, dispSymb, s);\n }\n if (s.path3) {\n constructChart(s.path3, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n },\n options: function() {\n return this.diagram.options;\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if (prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getStyle(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '{}';\n }\n\n function getSymbValue(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '';\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)];\n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n \n function getAnnotation(s) {\n\tvar startIndex = s.indexOf(\"(\") + 1, endIndex = s.indexOf(\")\");\n\tvar tmp = s.substring(startIndex, endIndex);\n\tif(tmp.indexOf(\",\") > 0) { tmp = tmp.substring(0, tmp.indexOf(\",\")); }\n\tvar tmp_split = tmp.split(\"@\");\n\tif(tmp_split.length > 1)\n\t\treturn startIndex >= 0 && endIndex >= 0 ? tmp_split[1] : \"\";\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0].trim();\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0].replace(/\\(.*\\)/, ''),\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null,\n function: null,\n lineStyle: {},\n params: {}\n };\n\n //parse parameters\n var params = parts[0].match(/\\((.*)\\)/);\n if (params && params.length > 1){\n var entries = params[1].split(',');\n for(var i = 0; i < entries.length; i++) {\n var entry = entries[i].split('=');\n if (entry.length == 2) {\n symbol.params[entry[0]] = entry[1];\n }\n }\n }\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':$') >= 0) {\n sub = symbol.text.split(':$');\n symbol.text = sub.shift();\n symbol.function = sub.join(':$');\n } else if (symbol.symbolType.indexOf(':$') >= 0) {\n sub = symbol.symbolType.split(':$');\n symbol.symbolType = sub.shift();\n symbol.function = sub.join(':$');\n } else if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n var ann = getAnnotation(line);\n if (ann) {\n line = line.replace('@' + ann, ''); \n }\n // flow\n var flowSymbols = line.split('->');\n for (var iS = 0, lenS = flowSymbols.length; iS < lenS; iS++) {\n var flowSymb = flowSymbols[iS];\n var symbVal = getSymbValue(flowSymb);\n\n if (symbVal === 'true' || symbVal === 'false') {\n // map true or false to yes or no respectively\n flowSymb = flowSymb.replace('true', 'yes');\n flowSymb = flowSymb.replace('false', 'no');\n }\n \n var next = getNextPath(flowSymb);\n var realSymb = getSymbol(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (ann) {\n if (realSymb.symbolType === 'condition') {\n if (next === \"yes\" || next === \"true\") {\n realSymb.yes_annotation = ann;\n } else {\n realSymb.no_annotation = ann;\n }\n } else if (realSymb.symbolType === 'parallel') {\n if (next === 'path1') {\n realSymb.path1_annotation = ann;\n } else if (next === 'path2') {\n realSymb.path2_annotation = ann;\n } else if (next === 'path3') {\n realSymb.path3_annotation = ann;\n }\n }\n ann = null;\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (iS + 1 < lenS) {\n var nextSymb = flowSymbols[iS + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n } else if (line.indexOf('@>') >= 0) {\n\n // line style\n var lineStyleSymbols = line.split('@>');\n for (var iSS = 0, lenSS = lineStyleSymbols.length; iSS < lenSS; iSS++) {\n if ((iSS + 1) !== lenSS) {\n var curSymb = getSymbol(lineStyleSymbols[iSS]);\n var nextSymbol = getSymbol(lineStyleSymbols[iSS+1]);\n\n curSymb['lineStyle'][nextSymbol.key] = JSON.parse(getStyle(lineStyleSymbols[iSS + 1]));\n }\n }\n }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.parse.js\n// module id = 4\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.yes_annotation = options.yes_annotation;\n this.no_annotation = options.no_annotation;\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = options.direction_yes;\n this.no_direction = options.direction_no;\n if (!this.no_direction && this.yes_direction === 'right') {\n this.no_direction = 'bottom';\n } else if (!this.yes_direction && this.no_direction === 'bottom') {\n this.yes_direction = 'right'\n }\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n this.symbol = symbol\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n var self = this;\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n if (self.right_symbol.symbolType === 'end') return;\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n \n if (this.left_symbol) {\n var leftPoint = this.getLeft();\n \n if (!this.left_symbol.isPositioned) {\n this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n \n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n \n if (hasSymbolUnder) {\n if (self.left_symbol.symbolType === 'end') return;\n self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n \n this.left_symbol.isPositioned = true;\n \n this.left_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.yes_annotation ? this.yes_annotation : this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.no_annotation ? this.no_annotation : this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.condition.js\n// module id = 5\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Parallel(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n this.path1_annotation = options.path1_annotation || '';\n this.path2_annotation = options.path2_annotation || '';\n this.path3_annotation = options.path3_annotation || '';\n this.textMargin = this.getAttr('text-margin');\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'top';\n this.params = options.params;\n if (options.direction_next === 'path1' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n if (options.direction_next === 'path2' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n if (options.direction_next === 'path3' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n\n if (options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3) {\n if (options.direction_path1 === 'right') {\n this.path2_direction = 'bottom';\n this.path1_direction = 'right';\n this.path3_direction = 'top';\n } else if (options.direction_path1 === 'top') {\n this.path2_direction = 'right';\n this.path1_direction = 'top';\n this.path3_direction = 'bottom';\n } else if (options.direction_path1 === 'left') {\n this.path2_direction = 'right';\n this.path1_direction = 'left';\n this.path3_direction = 'bottom';\n } else {\n this.path2_direction = 'right';\n this.path1_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else if (options.path1 && !options.direction_path1 && options.path2 && options.direction_path2 && options.path3 && !options.direction_path3) {\n if (options.direction_path2 === 'right') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'top';\n } else if (options.direction_path2 === 'left') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'left';\n this.path3_direction = 'right';\n } else {\n this.path1_direction = 'right';\n this.path2_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else if (options.path1 && !options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && options.direction_path3) {\n if (options.direction_path2 === 'right') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'top';\n this.path3_direction = 'right';\n } else if (options.direction_path2 === 'left') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'left';\n } else {\n this.path1_direction = 'right';\n this.path2_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else {\n this.path1_direction = options.direction_path1;\n this.path2_direction = options.direction_path2;\n this.path3_direction = options.direction_path3;\n }\n\n this.path1_direction = this.path1_direction || 'bottom';\n this.path2_direction = this.path2_direction || 'right';\n this.path3_direction = this.path3_direction || 'top';\n\n this.initialize();\n}\ninherits(Parallel, Symbol);\n\nParallel.prototype.render = function() {\n if (this.path1_direction) {\n this[this.path1_direction + '_symbol'] = this.path1_symbol;\n }\n\n if (this.path2_direction) {\n this[this.path2_direction + '_symbol'] = this.path2_symbol;\n }\n\n if (this.path3_direction) {\n this[this.path3_direction + '_symbol'] = this.path3_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.top_symbol) {\n var topPoint = this.getTop();\n\n if (!this.top_symbol.isPositioned) {\n this.top_symbol.shiftY(this.getY() - this.top_symbol.height - lineLength);\n this.top_symbol.setX(topPoint.x + this.top_symbol.width);\n this.top_symbol.isPositioned = true;\n\n this.top_symbol.render();\n }\n }\n\n var self = this;\n\n if (this.left_symbol) {\n var leftPoint = this.getLeft();\n\n if (!this.left_symbol.isPositioned) {\n this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n if (self.left_symbol.symbolType === 'end') return;\n self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.left_symbol.isPositioned = true;\n\n this.left_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n if (self.right_symbol.symbolType === 'end') return;\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nParallel.prototype.renderLines = function() {\n if (this.path1_symbol) {\n this.drawLineTo(this.path1_symbol, this.path1_annotation, this.path1_direction);\n }\n\n if (this.path2_symbol) {\n this.drawLineTo(this.path2_symbol, this.path2_annotation, this.path2_direction);\n }\n\n if (this.path3_symbol) {\n this.drawLineTo(this.path3_symbol, this.path3_annotation, this.path3_direction);\n }\n};\n\nmodule.exports = Parallel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.parallel.js\n// module id = 6\n// module chunks = 0","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\nvar Parallel = require('./flowchart.symbol.parallel');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if (symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else if (symbol instanceof(Parallel)) {\n symbol.path1 = function(nextSymbol) {\n symbol.path1_symbol = nextSymbol;\n if (symbol.path2_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.path2 = function(nextSymbol) {\n symbol.path2_symbol = nextSymbol;\n if (symbol.path3_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.path3 = function(nextSymbol) {\n symbol.path3_symbol = nextSymbol;\n if (symbol.path1_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n minX = 0,\n minY = 0,\n symbol,\n line;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n var x;\n var y;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n var leftX = symbol.getX()\n x = leftX + symbol.width;\n y = symbol.getY() + symbol.height;\n if (leftX < minX) {\n minX = leftX;\n }\n if (x > maxX) {\n maxX = x;\n }\n if (y > maxY) {\n maxY = y;\n }\n }\n\n for (i = 0, len = this.lines.length; i < len; i++) {\n line = this.lines[i].getBBox();\n x = line.x;\n y = line.y;\n var x2 = line.x2;\n var y2 = line.y2;\n if (x < minX) {\n minX = x;\n }\n if (y < minY) {\n minY = y;\n }\n if (x2 > maxX) {\n maxX = x2;\n }\n if (y2 > maxY) {\n maxY = y2;\n }\n }\n\n var scale = this.options['scale'];\n var lineWidth = this.options['line-width'];\n\n if (this.minXFromSymbols < minX) minX = this.minXFromSymbols;\n\n if (minX < 0) minX -= lineWidth;\n if (minY < 0) minY -= lineWidth;\n\n var width = maxX + lineWidth - minX;\n var height = maxY + lineWidth - minY;\n\n this.paper.setSize(width * scale, height * scale);\n this.paper.setViewBox(minX, minY, width, height, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode && paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.chart.js\n// module id = 7\n// module chunks = 0","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'roundness': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {},\n 'parallel': {}\n } //,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.defaults.js\n// module id = 8\n// module chunks = 0","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.shim.js\n// module id = 9\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.end.js\n// module id = 10\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n this.symbol = symbol\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.inputoutput.js\n// module id = 11\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.operation.js\n// module id = 12\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.start.js\n// module id = 13\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.subroutine.js\n// module id = 14\n// module chunks = 0","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\n\t(function( $ ) {\n\t\tfunction paramFit(needle, haystack) {\n\t\t\treturn needle == haystack ||\n\t\t\t( Array.isArray(haystack) && (haystack.includes(needle) || haystack.includes(Number(needle)) ))\n\t\t}\n\t\tvar methods = {\n\t\t\tinit : function(options) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tthis.chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tthis.chart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t},\n\t\t\tsetFlowStateByParam : function(param, paramValue, newFlowState) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar chart = this.chart;\n\n\t\t\t\t\t// @todo this should be part of Symbol API\n\t\t\t\t\tvar nextSymbolKeys = ['next', 'yes', 'no', 'path1', 'path2', 'path3'];\n\n\t\t\t\t\tfor (var property in chart.symbols) {\n\t\t\t\t\t\tif (chart.symbols.hasOwnProperty(property)) {\n\t\t\t\t\t\t\tvar symbol = chart.symbols[property];\n\t\t\t\t\t\t\tvar val = symbol.params[param];\n\t\t\t\t\t\t\tif (paramFit(val, paramValue)) {\n\t\t\t\t\t\t\t\tsymbol.flowstate = newFlowState;\n\t\t\t\t\t\t\t\tfor (var nski = 0; nski < nextSymbolKeys.length; nski++) {\n\t\t\t\t\t\t\t\t\tvar nextSymbolKey = nextSymbolKeys[nski];\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey] &&\n\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey]['params'] &&\n\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey]['params'][param] &&\n\t\t\t\t\t\t\t\t\t\tparamFit(symbol[nextSymbolKey]['params'][param], paramValue)\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tsymbol.lineStyle[symbol[nextSymbolKey]['key']] = {stroke: chart.options()['flowstate'][newFlowState]['fill']};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tchart.clean();\n\t\t\t\t\tchart.drawSVG(this);\n\t\t\t\t});\n\n\t\t\t},\n\t\t\tclearFlowState: function () {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar chart = this.chart;\n\n\t\t\t\t\tfor (var property in chart.symbols) {\n\t\t\t\t\t\tif (chart.symbols.hasOwnProperty(property)) {\n\t\t\t\t\t\t\tvar node = chart.symbols[property];\n\t\t\t\t\t\t\tnode.flowstate = '';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tchart.clean();\n\t\t\t\t\tchart.drawSVG(this);\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\t$.fn.flowChart = function(methodOrOptions) {\n\t\t\tif ( methods[methodOrOptions] ) {\n\t\t\t\treturn methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 ));\n\t\t\t} else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ) {\n\t\t\t\t// Default to \"init\"\n\t\t\t\treturn methods.init.apply( this, arguments );\n\t\t\t} else {\n\t\t\t\t$.error( 'Method ' + methodOrOptions + ' does not exist on jQuery.flowChart' );\n\t\t\t}\n\t\t};\n\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/jquery-plugin.js\n// module id = 15\n// module chunks = 0","module.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"Raphael\"\n// module id = 16\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/releasenotes.md b/releasenotes.md index 665f6eb2..e518a93d 100644 --- a/releasenotes.md +++ b/releasenotes.md @@ -1,3 +1,7 @@ +### v1.17.0 + +- Styling to allow rounded corners [#227](https://github.com/adrai/flowchart.js/pull/227) + ### v1.16.0 - Custom annotations for parallel [#225](https://github.com/adrai/flowchart.js/issues/225) diff --git a/site b/site index d70e761d..98a1c219 160000 --- a/site +++ b/site @@ -1 +1 @@ -Subproject commit d70e761d83f995515ca947516e338ac7076f8da6 +Subproject commit 98a1c219c80cb57bb2a3fc5c5eea995031b4dd3d From 7f5357ce72d729d16b6744f9b0b76aba5dadf09d Mon Sep 17 00:00:00 2001 From: Bishop Clark Date: Sun, 7 Nov 2021 23:03:39 -0800 Subject: [PATCH 07/18] Update README.md (#228) 'the above [notice]' violates adjective order, so let's use 'preceding' to avoid it. --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 572d4fed..ed29832d 100644 --- a/README.md +++ b/README.md @@ -141,7 +141,7 @@ Connection syntax is as follows: Items in `[]` are optional. ### Directions -The following directions are available and define the direction the connection will leave the node from. If there are more than one specifiers, it is always the last. All nodes have a default direction making this an optional specification. `` will be used to indicate that one of the below should be used in its place. +The following directions are available and define the direction the connection will leave the node from. If there are more than one specifiers, it is always the last. All nodes have a default direction making this an optional specification. `` will be used to indicate that one of the following should be used in its place. * left * right @@ -264,7 +264,7 @@ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in +The preceding copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR From 5fd8eb1846de1751e52061f85d57c55aeb963a1a Mon Sep 17 00:00:00 2001 From: Adriano Raiano Date: Mon, 31 Jan 2022 20:03:35 +0100 Subject: [PATCH 08/18] update site --- site | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site b/site index 98a1c219..8f27a2c2 160000 --- a/site +++ b/site @@ -1 +1 @@ -Subproject commit 98a1c219c80cb57bb2a3fc5c5eea995031b4dd3d +Subproject commit 8f27a2c217149f23fb3728282375f346e6b4f264 From 2f8766bf4538676e7fa4cff6aadc43a80f3bfb6a Mon Sep 17 00:00:00 2001 From: Adriano Raiano Date: Mon, 31 Jan 2022 20:07:40 +0100 Subject: [PATCH 09/18] update site --- site | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site b/site index 8f27a2c2..86332233 160000 --- a/site +++ b/site @@ -1 +1 @@ -Subproject commit 8f27a2c217149f23fb3728282375f346e6b4f264 +Subproject commit 8633223351f901b510bddb0773c7d29e417380b2 From 5002d994c8cc2142d5a8d5fae7ddf27ba1ab03cf Mon Sep 17 00:00:00 2001 From: Adriano Raiano Date: Wed, 2 Feb 2022 19:32:01 +0100 Subject: [PATCH 10/18] fix start and end roundness introduced in #227, fixes #229 --- license | 2 +- package.json | 2 +- release/flowchart.js | 14 ++++++++------ release/flowchart.js.map | 2 +- release/flowchart.min.js | 8 ++++---- release/flowchart.min.js.map | 2 +- releasenotes.md | 4 ++++ site | 2 +- src/flowchart.defaults.js | 2 +- src/flowchart.symbol.js | 7 +++++-- types/index.d.ts | 2 +- 11 files changed, 28 insertions(+), 19 deletions(-) diff --git a/license b/license index a35ab439..e88d9ac6 100644 --- a/license +++ b/license @@ -1,4 +1,4 @@ -Copyright (c) 2019 Adriano Raiano +Copyright (c) 2022 Adriano Raiano Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/package.json b/package.json index fa9f239c..b1e8c54e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "author": "adrai", "name": "flowchart.js", - "version": "1.17.0", + "version": "1.17.1", "main": "./index", "private": false, "engines": { diff --git a/release/flowchart.js b/release/flowchart.js index 64403416..b25f0141 100644 --- a/release/flowchart.js +++ b/release/flowchart.js @@ -1,5 +1,5 @@ -// flowchart.js, v1.17.0 -// Copyright (c)2021 Adriano Raiano (adrai). +// flowchart.js, v1.17.1 +// Copyright (c)2022 Adriano Raiano (adrai). // Distributed under MIT license // http://adrai.github.io/flowchart.js @@ -170,9 +170,11 @@ "stroke-width": this.getAttr("line-width"), width: this.text.getBBox().width + 2 * tmpMargin, height: this.text.getBBox().height + 2 * tmpMargin - }), symbol.node.setAttribute("class", this.getAttr("class")), symbol.node.setAttribute("ry", this.getAttr("roundness")), - symbol.node.setAttribute("rx", this.getAttr("roundness")), options.link && symbol.attr("href", options.link), - options.target && symbol.attr("target", options.target), //ndrqu Add click function with event and options params + }), symbol.node.setAttribute("class", this.getAttr("class")); + var roundness = this.getAttr("roundness"); + isNaN(roundness) || (symbol.node.setAttribute("ry", roundness), symbol.node.setAttribute("rx", roundness)), + options.link && symbol.attr("href", options.link), options.target && symbol.attr("target", options.target), + //ndrqu Add click function with event and options params options.function && (symbol.node.addEventListener("click", function(evt) { window[options.function](evt, options); }, !1), symbol.attr({ @@ -1054,7 +1056,7 @@ module.exports = { x: 0, y: 0, - roundness: 0, + // 'roundness': 0, "line-width": 3, "line-length": 50, "text-margin": 10, diff --git a/release/flowchart.js.map b/release/flowchart.js.map index cced1f3a..935f351f 100644 --- a/release/flowchart.js.map +++ b/release/flowchart.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.js","webpack:///webpack/bootstrap 447a64fc8584010fb6f0","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.symbol.parallel.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_16__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","lineStyle","key","leftLines","rightLines","topLines","bottomLines","params","next_direction","next","undefined","text","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","function","cursor","addEventListener","evt","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","self","lineLength","rightPoint","isPositioned","shift","symb","hasSymbolUnder","len","diff","Math","abs","leftPoint","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","yOffset","right","bottom","top","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","max","rightStart","topEnd","bottomStart","diffX","leftStart","topStart","leftEnd","rightEnd","l","llen","lines","otherLine","ePath","lPath","iP","lenP","newPath","line1_from_x","line1_from_y","line1_to_x","line1_to_y","lP","lenlP","newLinePath","line2_from_x","line2_from_y","line2_to_x","line2_to_y","res","onLine1","onLine2","newSegment","splice","minXFromSymbols","maxXFromLine","drawPath","location","points","path","pathValues","from","to","toString","arrow-end","centerText","textPath","textAnchor","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getStyle","s","startIndex","endIndex","getSymbValue","getSymbol","getNextPath","flowSymb","getAnnotation","tmp","tmp_split","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Parallel","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","path1","path2","path3","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","parts","match","entries","entry","sub","join","txtAndState","pop","ann","flowSymbols","iS","lenS","symbVal","realSymb","direction","condOpt","yes_annotation","no_annotation","path1_annotation","path2_annotation","path3_annotation","nextSymb","lineStyleSymbols","iSS","lenSS","curSymb","nextSymbol","JSON","textMargin","yes_direction","direction_yes","no_direction","direction_no","startX","startY","yes_symbol","no_symbol","bottom_symbol","right_symbol","left_symbol","rect","path1_direction","path2_direction","path3_direction","direction_next","direction_path1","direction_path2","direction_path3","path1_symbol","path2_symbol","path3_symbol","top_symbol","topPoint","Raphael","handle","flowChart","maxHeight","maxY","minX","minY","leftX","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","roundness","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","parallel","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","innerWrap","jQuery","$","paramFit","needle","haystack","isArray","includes","methods","init","each","$this","html","setFlowStateByParam","param","paramValue","newFlowState","nextSymbolKeys","property","hasOwnProperty","val","nski","nextSymbolKey","clearFlowState","fn","methodOrOptions","apply","slice","error"],"mappings":"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","file":"flowchart.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_16__) {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_16__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 9);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 15);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ }),\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ (function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ }),\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t this.lineStyle = (options.lineStyle || {});\n\t this.key = (options.key || '');\n\t this.leftLines = [];\n\t this.rightLines = [];\n\t this.topLines = [];\n\t this.bottomLines = [];\n\t this.params = options.params;\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t \n\t //ndrqu Add click function with event and options params\n\t if (options.function) { \n\t this.text.attr({ 'cursor' : 'pointer' });\n\t\n\t this.text.node.addEventListener(\"click\", function(evt) {\n\t window[options.function](evt,options);\n\t }, false);\n\t }\n\t\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t symbol.node.setAttribute('ry', this.getAttr('roundness'));\n\t symbol.node.setAttribute('rx', this.getAttr('roundness'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t\n\t //ndrqu Add click function with event and options params\n\t if (options.function) { \n\t symbol.node.addEventListener(\"click\", function(evt) {\n\t window[options.function](evt,options);\n\t }, false);\n\t symbol.attr({ 'cursor' : 'pointer' });\n\t }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var self = this;\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.next.symbolType === 'end') return;\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else if (this.next_direction === 'left') {\n\t\n\t var leftPoint = this.getLeft();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.setY(leftPoint.y - this.next.height/2);\n\t this.next.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.next.symbolType === 'end') return;\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, this.getAttr('arrow-text') || '', this.next_direction);\n\t } else {\n\t this.drawLineTo(this.next, this.getAttr('arrow-text') || '');\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n\t if (this.connectedTo.indexOf(symbol) < 0) {\n\t this.connectedTo.push(symbol);\n\t }\n\t\n\t var x = this.getCenter().x,\n\t y = this.getCenter().y,\n\t right = this.getRight(),\n\t bottom = this.getBottom(),\n\t top = this.getTop(),\n\t left = this.getLeft();\n\t\n\t var symbolX = symbol.getCenter().x,\n\t symbolY = symbol.getCenter().y,\n\t symbolTop = symbol.getTop(),\n\t symbolRight = symbol.getRight(),\n\t symbolLeft = symbol.getLeft();\n\t\n\t var isOnSameColumn = x === symbolX,\n\t isOnSameLine = y === symbolY,\n\t isUnder = y < symbolY,\n\t isUpper = y > symbolY || this === symbol,\n\t isLeft = x > symbolX,\n\t isRight = x < symbolX;\n\t\n\t var maxX = 0,\n\t line,\n\t yOffset,\n\t lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t if (symbol.topLines.length === 0 && this.bottomLines.length === 0) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\n\t } else {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t line = drawLine(this.chart, bottom, [\n\t {x: symbolTop.x, y: symbolTop.y - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n\t if (symbol.leftLines.length === 0 && this.rightLines.length === 0) {\n\t line = drawLine(this.chart, right, symbolLeft, text);\n\t } else {\n\t yOffset = Math.max(symbol.leftLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x, y: right.y - yOffset},\n\t {x: right.x, y: symbolLeft.y - yOffset},\n\t {x: symbolLeft.x, y: symbolLeft.y - yOffset},\n\t {x: symbolLeft.x, y: symbolLeft.y}\n\t ], text);\n\t }\n\t this.rightLines.push(line);\n\t symbol.leftLines.push(line);\n\t this.rightStart = true;\n\t symbol.leftEnd = true;\n\t maxX = symbolLeft.x;\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n\t if (symbol.rightLines.length === 0 && this.leftLines.length === 0) {\n\t line = drawLine(this.chart, left, symbolRight, text);\n\t } else {\n\t yOffset = Math.max(symbol.rightLines.length, this.leftLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x, y: right.y - yOffset},\n\t {x: right.x, y: symbolRight.y - yOffset},\n\t {x: symbolRight.x, y: symbolRight.y - yOffset},\n\t {x: symbolRight.x, y: symbolRight.y}\n\t ], text);\n\t }\n\t this.leftLines.push(line);\n\t symbol.rightLines.push(line);\n\t this.leftStart = true;\n\t symbol.rightEnd = true;\n\t maxX = symbolRight.x;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n\t yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y - yOffset},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightLines.push(line);\n\t symbol.topLines.push(line);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n\t yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y - yOffset},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightLines.push(line);\n\t symbol.topLines.push(line);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2 - yOffset},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t } else {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((!origin || origin === 'bottom') && isRight && isUnder) {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t if (symbolTop.x > maxX) maxX = symbolTop.x;\n\t } else if ((!origin || origin === 'bottom') && isRight) {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2 - yOffset},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((origin && origin === 'right') && isLeft) {\n\t yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightLines.push(line);\n\t symbol.topLines.push(line);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'right') && isRight) {\n\t yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - yOffset}\n\t ], text);\n\t this.rightLines.push(line);\n\t symbol.topLines.push(line);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2 - yOffset},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + lineLength/2;\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n\t var diffX = left.x - lineLength/2;\n\t if (symbolLeft.x < left.x) {\n\t diffX = symbolLeft.x - lineLength/2;\n\t }\n\t yOffset = Math.max(symbol.topLines.length, this.leftLines.length) * 10;\n\t line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y - yOffset},\n\t {x: diffX, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftLines.push(line);\n\t symbol.topLines.push(line);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\n\t yOffset = Math.max(symbol.topLines.length, this.leftLines.length) * 10;\n\t line = drawLine(this.chart, left, [\n\t {x: symbolTop.x + (left.x - symbolTop.x)/2, y: left.y},\n\t {x: symbolTop.x + (left.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftLines.push(line);\n\t symbol.topLines.push(line);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'top')) {\n\t yOffset = Math.max(symbol.topLines.length, this.topLines.length) * 10;\n\t line = drawLine(this.chart, top, [\n\t {x: top.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.topLines.push(line);\n\t symbol.topLines.push(line);\n\t this.topStart = true;\n\t symbol.topEnd = true;\n\t maxX = top.x;\n\t }\n\t\n\t //update line style\n\t if (this.lineStyle[symbol.key] && line){\n\t line.attr(this.lineStyle[symbol.key]);\n\t }\n\t\n\t if (line) {\n\t for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n\t var otherLine = this.chart.lines[l];\n\t\n\t var ePath = otherLine.attr('path'),\n\t lPath = line.attr('path');\n\t\n\t for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n\t var newPath = [];\n\t newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n\t newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\t\n\t var line1_from_x = newPath[0][1];\n\t var line1_from_y = newPath[0][2];\n\t var line1_to_x = newPath[1][1];\n\t var line1_to_y = newPath[1][2];\n\t\n\t for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n\t var newLinePath = [];\n\t newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n\t newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\t\n\t var line2_from_x = newLinePath[0][1];\n\t var line2_from_y = newLinePath[0][2];\n\t var line2_to_x = newLinePath[1][1];\n\t var line2_to_y = newLinePath[1][2];\n\t\n\t var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n\t if (res.onLine1 && res.onLine2) {\n\t\n\t var newSegment;\n\t if (line2_from_y === line2_to_y) {\n\t if (line2_from_x > line2_to_x) {\n\t newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t } else {\n\t if (line2_from_y > line2_to_y) {\n\t newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t }\n\t\n\t lP += 2;\n\t }\n\t }\n\t }\n\t }\n\t\n\t this.chart.lines.push(line);\n\t if (this.chart.minXFromSymbols === undefined || this.chart.minXFromSymbols > left.x) {\n\t this.chart.minXFromSymbols = left.x;\n\t }\n\t }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ }),\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ (function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t var textAnchor = 'start';\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t if (from.x > firstTo.x) {\n\t x -= chart.options['text-margin']/2;\n\t textAnchor = 'end';\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t }\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t if (from.y > firstTo.y) {\n\t y -= chart.options['text-margin']*2;\n\t }\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': textAnchor,\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ }),\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 7);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 13);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 10);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 12);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 11);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 14);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\tvar Parallel = __webpack_require__(/*! ./flowchart.symbol.parallel */ 6);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s);\n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t case 'parallel':\n\t dispSymbols[s.key] = new Parallel(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else if (prevDisp instanceof(Parallel)) {\n\t if (prev.path1 === s) {\n\t prevDisp.path1(dispSymb);\n\t }\n\t if (prev.path2 === s) {\n\t prevDisp.path2(dispSymb);\n\t }\n\t if (prev.path3 === s) {\n\t prevDisp.path3(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (dispSymb instanceof(Parallel)) {\n\t if (s.path1) {\n\t constructChart(s.path1, dispSymb, s);\n\t }\n\t if (s.path2) {\n\t constructChart(s.path2, dispSymb, s);\n\t }\n\t if (s.path3) {\n\t constructChart(s.path3, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t },\n\t options: function() {\n\t return this.diagram.options;\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if (prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getStyle(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '{}';\n\t }\n\t\n\t function getSymbValue(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '';\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)];\n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t \n\t function getAnnotation(s) {\n\t\tvar startIndex = s.indexOf(\"(\") + 1, endIndex = s.indexOf(\")\");\n\t\tvar tmp = s.substring(startIndex, endIndex);\n\t\tif(tmp.indexOf(\",\") > 0) { tmp = tmp.substring(0, tmp.indexOf(\",\")); }\n\t\tvar tmp_split = tmp.split(\"@\");\n\t\tif(tmp_split.length > 1)\n\t\t\treturn startIndex >= 0 && endIndex >= 0 ? tmp_split[1] : \"\";\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0].trim();\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0].replace(/\\(.*\\)/, ''),\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null,\n\t function: null,\n\t lineStyle: {},\n\t params: {}\n\t };\n\t\n\t //parse parameters\n\t var params = parts[0].match(/\\((.*)\\)/);\n\t if (params && params.length > 1){\n\t var entries = params[1].split(',');\n\t for(var i = 0; i < entries.length; i++) {\n\t var entry = entries[i].split('=');\n\t if (entry.length == 2) {\n\t symbol.params[entry[0]] = entry[1];\n\t }\n\t }\n\t }\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':$') >= 0) {\n\t sub = symbol.text.split(':$');\n\t symbol.text = sub.shift();\n\t symbol.function = sub.join(':$');\n\t } else if (symbol.symbolType.indexOf(':$') >= 0) {\n\t sub = symbol.symbolType.split(':$');\n\t symbol.symbolType = sub.shift();\n\t symbol.function = sub.join(':$');\n\t } else if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t var ann = getAnnotation(line);\n\t if (ann) {\n\t line = line.replace('@' + ann, ''); \n\t }\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var iS = 0, lenS = flowSymbols.length; iS < lenS; iS++) {\n\t var flowSymb = flowSymbols[iS];\n\t var symbVal = getSymbValue(flowSymb);\n\t\n\t if (symbVal === 'true' || symbVal === 'false') {\n\t // map true or false to yes or no respectively\n\t flowSymb = flowSymb.replace('true', 'yes');\n\t flowSymb = flowSymb.replace('false', 'no');\n\t }\n\t \n\t var next = getNextPath(flowSymb);\n\t var realSymb = getSymbol(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (ann) {\n\t if (realSymb.symbolType === 'condition') {\n\t if (next === \"yes\" || next === \"true\") {\n\t realSymb.yes_annotation = ann;\n\t } else {\n\t realSymb.no_annotation = ann;\n\t }\n\t } else if (realSymb.symbolType === 'parallel') {\n\t if (next === 'path1') {\n\t realSymb.path1_annotation = ann;\n\t } else if (next === 'path2') {\n\t realSymb.path2_annotation = ann;\n\t } else if (next === 'path3') {\n\t realSymb.path3_annotation = ann;\n\t }\n\t }\n\t ann = null;\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (iS + 1 < lenS) {\n\t var nextSymb = flowSymbols[iS + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t } else if (line.indexOf('@>') >= 0) {\n\t\n\t // line style\n\t var lineStyleSymbols = line.split('@>');\n\t for (var iSS = 0, lenSS = lineStyleSymbols.length; iSS < lenSS; iSS++) {\n\t if ((iSS + 1) !== lenSS) {\n\t var curSymb = getSymbol(lineStyleSymbols[iSS]);\n\t var nextSymbol = getSymbol(lineStyleSymbols[iSS+1]);\n\t\n\t curSymb['lineStyle'][nextSymbol.key] = JSON.parse(getStyle(lineStyleSymbols[iSS + 1]));\n\t }\n\t }\n\t }\n\t\n\t }\n\t return chart;\n\t}\n\t\n\tmodule.exports = parse;\n\n\n/***/ }),\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction Condition(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.yes_annotation = options.yes_annotation;\n\t this.no_annotation = options.no_annotation;\n\t this.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = options.direction_yes;\n\t this.no_direction = options.direction_no;\n\t if (!this.no_direction && this.yes_direction === 'right') {\n\t this.no_direction = 'bottom';\n\t } else if (!this.yes_direction && this.no_direction === 'bottom') {\n\t this.yes_direction = 'right'\n\t }\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t this.symbol = symbol\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t var self = this;\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.right_symbol.symbolType === 'end') return;\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t \n\t if (this.left_symbol) {\n\t var leftPoint = this.getLeft();\n\t \n\t if (!this.left_symbol.isPositioned) {\n\t this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n\t this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t \n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t \n\t if (hasSymbolUnder) {\n\t if (self.left_symbol.symbolType === 'end') return;\n\t self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t \n\t this.left_symbol.isPositioned = true;\n\t \n\t this.left_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.yes_annotation ? this.yes_annotation : this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.no_annotation ? this.no_annotation : this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ }),\n/* 6 */\n/*!******************************************!*\\\n !*** ./src/flowchart.symbol.parallel.js ***!\n \\******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Parallel(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t this.path1_annotation = options.path1_annotation || '';\n\t this.path2_annotation = options.path2_annotation || '';\n\t this.path3_annotation = options.path3_annotation || '';\n\t this.textMargin = this.getAttr('text-margin');\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t this.params = options.params;\n\t if (options.direction_next === 'path1' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path2' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path3' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t\n\t if (options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path1 === 'right') {\n\t this.path2_direction = 'bottom';\n\t this.path1_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path1 === 'top') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'top';\n\t this.path3_direction = 'bottom';\n\t } else if (options.direction_path1 === 'left') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'left';\n\t this.path3_direction = 'bottom';\n\t } else {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'left';\n\t this.path3_direction = 'right';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'top';\n\t this.path3_direction = 'right';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'left';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else {\n\t this.path1_direction = options.direction_path1;\n\t this.path2_direction = options.direction_path2;\n\t this.path3_direction = options.direction_path3;\n\t }\n\t\n\t this.path1_direction = this.path1_direction || 'bottom';\n\t this.path2_direction = this.path2_direction || 'right';\n\t this.path3_direction = this.path3_direction || 'top';\n\t\n\t this.initialize();\n\t}\n\tinherits(Parallel, Symbol);\n\t\n\tParallel.prototype.render = function() {\n\t if (this.path1_direction) {\n\t this[this.path1_direction + '_symbol'] = this.path1_symbol;\n\t }\n\t\n\t if (this.path2_direction) {\n\t this[this.path2_direction + '_symbol'] = this.path2_symbol;\n\t }\n\t\n\t if (this.path3_direction) {\n\t this[this.path3_direction + '_symbol'] = this.path3_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.top_symbol) {\n\t var topPoint = this.getTop();\n\t\n\t if (!this.top_symbol.isPositioned) {\n\t this.top_symbol.shiftY(this.getY() - this.top_symbol.height - lineLength);\n\t this.top_symbol.setX(topPoint.x + this.top_symbol.width);\n\t this.top_symbol.isPositioned = true;\n\t\n\t this.top_symbol.render();\n\t }\n\t }\n\t\n\t var self = this;\n\t\n\t if (this.left_symbol) {\n\t var leftPoint = this.getLeft();\n\t\n\t if (!this.left_symbol.isPositioned) {\n\t this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n\t this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.left_symbol.symbolType === 'end') return;\n\t self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.left_symbol.isPositioned = true;\n\t\n\t this.left_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.right_symbol.symbolType === 'end') return;\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tParallel.prototype.renderLines = function() {\n\t if (this.path1_symbol) {\n\t this.drawLineTo(this.path1_symbol, this.path1_annotation, this.path1_direction);\n\t }\n\t\n\t if (this.path2_symbol) {\n\t this.drawLineTo(this.path2_symbol, this.path2_annotation, this.path2_direction);\n\t }\n\t\n\t if (this.path3_symbol) {\n\t this.drawLineTo(this.path3_symbol, this.path3_annotation, this.path3_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Parallel;\n\n/***/ }),\n/* 7 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 16);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 8);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\tvar Parallel = __webpack_require__(/*! ./flowchart.symbol.parallel */ 6);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if (symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else if (symbol instanceof(Parallel)) {\n\t symbol.path1 = function(nextSymbol) {\n\t symbol.path1_symbol = nextSymbol;\n\t if (symbol.path2_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.path2 = function(nextSymbol) {\n\t symbol.path2_symbol = nextSymbol;\n\t if (symbol.path3_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.path3 = function(nextSymbol) {\n\t symbol.path3_symbol = nextSymbol;\n\t if (symbol.path1_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t minX = 0,\n\t minY = 0,\n\t symbol,\n\t line;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t var x;\n\t var y;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t var leftX = symbol.getX()\n\t x = leftX + symbol.width;\n\t y = symbol.getY() + symbol.height;\n\t if (leftX < minX) {\n\t minX = leftX;\n\t }\n\t if (x > maxX) {\n\t maxX = x;\n\t }\n\t if (y > maxY) {\n\t maxY = y;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.lines.length; i < len; i++) {\n\t line = this.lines[i].getBBox();\n\t x = line.x;\n\t y = line.y;\n\t var x2 = line.x2;\n\t var y2 = line.y2;\n\t if (x < minX) {\n\t minX = x;\n\t }\n\t if (y < minY) {\n\t minY = y;\n\t }\n\t if (x2 > maxX) {\n\t maxX = x2;\n\t }\n\t if (y2 > maxY) {\n\t maxY = y2;\n\t }\n\t }\n\t\n\t var scale = this.options['scale'];\n\t var lineWidth = this.options['line-width'];\n\t\n\t if (this.minXFromSymbols < minX) minX = this.minXFromSymbols;\n\t\n\t if (minX < 0) minX -= lineWidth;\n\t if (minY < 0) minY -= lineWidth;\n\t\n\t var width = maxX + lineWidth - minX;\n\t var height = maxY + lineWidth - minY;\n\t\n\t this.paper.setSize(width * scale, height * scale);\n\t this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode && paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n/***/ }),\n/* 8 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ (function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'roundness': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {},\n\t 'parallel': {}\n\t } //,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n/***/ }),\n/* 9 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ (function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ }),\n/* 10 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ }),\n/* 11 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t this.symbol = symbol\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ }),\n/* 12 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ }),\n/* 13 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ }),\n/* 14 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ }),\n/* 15 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\n\t\t(function( $ ) {\n\t\t\tfunction paramFit(needle, haystack) {\n\t\t\t\treturn needle == haystack ||\n\t\t\t\t( Array.isArray(haystack) && (haystack.includes(needle) || haystack.includes(Number(needle)) ))\n\t\t\t}\n\t\t\tvar methods = {\n\t\t\t\tinit : function(options) {\n\t\t\t\t\treturn this.each(function() {\n\t\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\t\tthis.chart = parse($this.text());\n\t\t\t\t\t\t$this.html('');\n\t\t\t\t\t\tthis.chart.drawSVG(this, options);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tsetFlowStateByParam : function(param, paramValue, newFlowState) {\n\t\t\t\t\treturn this.each(function() {\n\t\t\t\t\t\tvar chart = this.chart;\n\t\n\t\t\t\t\t\t// @todo this should be part of Symbol API\n\t\t\t\t\t\tvar nextSymbolKeys = ['next', 'yes', 'no', 'path1', 'path2', 'path3'];\n\t\n\t\t\t\t\t\tfor (var property in chart.symbols) {\n\t\t\t\t\t\t\tif (chart.symbols.hasOwnProperty(property)) {\n\t\t\t\t\t\t\t\tvar symbol = chart.symbols[property];\n\t\t\t\t\t\t\t\tvar val = symbol.params[param];\n\t\t\t\t\t\t\t\tif (paramFit(val, paramValue)) {\n\t\t\t\t\t\t\t\t\tsymbol.flowstate = newFlowState;\n\t\t\t\t\t\t\t\t\tfor (var nski = 0; nski < nextSymbolKeys.length; nski++) {\n\t\t\t\t\t\t\t\t\t\tvar nextSymbolKey = nextSymbolKeys[nski];\n\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey] &&\n\t\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey]['params'] &&\n\t\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey]['params'][param] &&\n\t\t\t\t\t\t\t\t\t\t\tparamFit(symbol[nextSymbolKey]['params'][param], paramValue)\n\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\tsymbol.lineStyle[symbol[nextSymbolKey]['key']] = {stroke: chart.options()['flowstate'][newFlowState]['fill']};\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tchart.clean();\n\t\t\t\t\t\tchart.drawSVG(this);\n\t\t\t\t\t});\n\t\n\t\t\t\t},\n\t\t\t\tclearFlowState: function () {\n\t\t\t\t\treturn this.each(function() {\n\t\t\t\t\t\tvar chart = this.chart;\n\t\n\t\t\t\t\t\tfor (var property in chart.symbols) {\n\t\t\t\t\t\t\tif (chart.symbols.hasOwnProperty(property)) {\n\t\t\t\t\t\t\t\tvar node = chart.symbols[property];\n\t\t\t\t\t\t\t\tnode.flowstate = '';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tchart.clean();\n\t\t\t\t\t\tchart.drawSVG(this);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t\t$.fn.flowChart = function(methodOrOptions) {\n\t\t\t\tif ( methods[methodOrOptions] ) {\n\t\t\t\t\treturn methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 ));\n\t\t\t\t} else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ) {\n\t\t\t\t\t// Default to \"init\"\n\t\t\t\t\treturn methods.init.apply( this, arguments );\n\t\t\t\t} else {\n\t\t\t\t\t$.error( 'Method ' + methodOrOptions + ' does not exist on jQuery.flowChart' );\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ }),\n/* 16 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ (function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// flowchart.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 447a64fc8584010fb6f0","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./index.js\n// module id = 0\n// module chunks = 0","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.helpers.js\n// module id = 1\n// module chunks = 0","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n this.lineStyle = (options.lineStyle || {});\n this.key = (options.key || '');\n this.leftLines = [];\n this.rightLines = [];\n this.topLines = [];\n this.bottomLines = [];\n this.params = options.params;\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n \n //ndrqu Add click function with event and options params\n if (options.function) { \n this.text.attr({ 'cursor' : 'pointer' });\n\n this.text.node.addEventListener(\"click\", function(evt) {\n window[options.function](evt,options);\n }, false);\n }\n\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n symbol.node.setAttribute('ry', this.getAttr('roundness'));\n symbol.node.setAttribute('rx', this.getAttr('roundness'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n\n //ndrqu Add click function with event and options params\n if (options.function) { \n symbol.node.addEventListener(\"click\", function(evt) {\n window[options.function](evt,options);\n }, false);\n symbol.attr({ 'cursor' : 'pointer' });\n }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var self = this;\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n if (self.next.symbolType === 'end') return;\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else if (this.next_direction === 'left') {\n\n var leftPoint = this.getLeft();\n\n if (!this.next.isPositioned) {\n this.next.setY(leftPoint.y - this.next.height/2);\n this.next.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n if (self.next.symbolType === 'end') return;\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, this.getAttr('arrow-text') || '', this.next_direction);\n } else {\n this.drawLineTo(this.next, this.getAttr('arrow-text') || '');\n }\n }\n};\n\nSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n if (this.connectedTo.indexOf(symbol) < 0) {\n this.connectedTo.push(symbol);\n }\n\n var x = this.getCenter().x,\n y = this.getCenter().y,\n right = this.getRight(),\n bottom = this.getBottom(),\n top = this.getTop(),\n left = this.getLeft();\n\n var symbolX = symbol.getCenter().x,\n symbolY = symbol.getCenter().y,\n symbolTop = symbol.getTop(),\n symbolRight = symbol.getRight(),\n symbolLeft = symbol.getLeft();\n\n var isOnSameColumn = x === symbolX,\n isOnSameLine = y === symbolY,\n isUnder = y < symbolY,\n isUpper = y > symbolY || this === symbol,\n isLeft = x > symbolX,\n isRight = x < symbolX;\n\n var maxX = 0,\n line,\n yOffset,\n lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n if (symbol.topLines.length === 0 && this.bottomLines.length === 0) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n } else {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n line = drawLine(this.chart, bottom, [\n {x: symbolTop.x, y: symbolTop.y - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n if (symbol.leftLines.length === 0 && this.rightLines.length === 0) {\n line = drawLine(this.chart, right, symbolLeft, text);\n } else {\n yOffset = Math.max(symbol.leftLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x, y: right.y - yOffset},\n {x: right.x, y: symbolLeft.y - yOffset},\n {x: symbolLeft.x, y: symbolLeft.y - yOffset},\n {x: symbolLeft.x, y: symbolLeft.y}\n ], text);\n }\n this.rightLines.push(line);\n symbol.leftLines.push(line);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n if (symbol.rightLines.length === 0 && this.leftLines.length === 0) {\n line = drawLine(this.chart, left, symbolRight, text);\n } else {\n yOffset = Math.max(symbol.rightLines.length, this.leftLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x, y: right.y - yOffset},\n {x: right.x, y: symbolRight.y - yOffset},\n {x: symbolRight.x, y: symbolRight.y - yOffset},\n {x: symbolRight.x, y: symbolRight.y}\n ], text);\n }\n this.leftLines.push(line);\n symbol.rightLines.push(line);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y - yOffset},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightLines.push(line);\n symbol.topLines.push(line);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y - yOffset},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightLines.push(line);\n symbol.topLines.push(line);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2 - yOffset},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n } else {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((!origin || origin === 'bottom') && isRight && isUnder) {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n if (symbolTop.x > maxX) maxX = symbolTop.x;\n } else if ((!origin || origin === 'bottom') && isRight) {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2 - yOffset},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((origin && origin === 'right') && isLeft) {\n yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightLines.push(line);\n symbol.topLines.push(line);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y - yOffset},\n {x: symbolTop.x, y: symbolTop.y - yOffset}\n ], text);\n this.rightLines.push(line);\n symbol.topLines.push(line);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2 - yOffset},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + lineLength/2;\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n var diffX = left.x - lineLength/2;\n if (symbolLeft.x < left.x) {\n diffX = symbolLeft.x - lineLength/2;\n }\n yOffset = Math.max(symbol.topLines.length, this.leftLines.length) * 10;\n line = drawLine(this.chart, left, [\n {x: diffX, y: left.y - yOffset},\n {x: diffX, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftLines.push(line);\n symbol.topLines.push(line);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\n yOffset = Math.max(symbol.topLines.length, this.leftLines.length) * 10;\n line = drawLine(this.chart, left, [\n {x: symbolTop.x + (left.x - symbolTop.x)/2, y: left.y},\n {x: symbolTop.x + (left.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftLines.push(line);\n symbol.topLines.push(line);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'top')) {\n yOffset = Math.max(symbol.topLines.length, this.topLines.length) * 10;\n line = drawLine(this.chart, top, [\n {x: top.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.topLines.push(line);\n symbol.topLines.push(line);\n this.topStart = true;\n symbol.topEnd = true;\n maxX = top.x;\n }\n\n //update line style\n if (this.lineStyle[symbol.key] && line){\n line.attr(this.lineStyle[symbol.key]);\n }\n\n if (line) {\n for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n var otherLine = this.chart.lines[l];\n\n var ePath = otherLine.attr('path'),\n lPath = line.attr('path');\n\n for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n var newPath = [];\n newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\n var line1_from_x = newPath[0][1];\n var line1_from_y = newPath[0][2];\n var line1_to_x = newPath[1][1];\n var line1_to_y = newPath[1][2];\n\n for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n var newLinePath = [];\n newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\n var line2_from_x = newLinePath[0][1];\n var line2_from_y = newLinePath[0][2];\n var line2_to_x = newLinePath[1][1];\n var line2_to_y = newLinePath[1][2];\n\n var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n if (res.onLine1 && res.onLine2) {\n\n var newSegment;\n if (line2_from_y === line2_to_y) {\n if (line2_from_x > line2_to_x) {\n newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n } else {\n if (line2_from_y > line2_to_y) {\n newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n }\n\n lP += 2;\n }\n }\n }\n }\n\n this.chart.lines.push(line);\n if (this.chart.minXFromSymbols === undefined || this.chart.minXFromSymbols > left.x) {\n this.chart.minXFromSymbols = left.x;\n }\n }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.js\n// module id = 2\n// module chunks = 0","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n var textAnchor = 'start';\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n if (from.x > firstTo.x) {\n x -= chart.options['text-margin']/2;\n textAnchor = 'end';\n } else {\n x += chart.options['text-margin']/2;\n }\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n if (from.y > firstTo.y) {\n y -= chart.options['text-margin']*2;\n }\n }\n }\n\n textPath.attr({\n 'text-anchor': textAnchor,\n 'font-size': chart.options['font-size'],\n 'fill': chart.options['font-color'],\n x: x,\n y: y\n });\n\n if (font) textPath.attr({ 'font': font });\n if (fontF) textPath.attr({ 'font-family': fontF });\n if (fontW) textPath.attr({ 'font-weight': fontW });\n }\n\n return line;\n}\n\nfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n var denominator, a, b, numerator1, numerator2, result = {\n x: null,\n y: null,\n onLine1: false,\n onLine2: false\n };\n denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n if (denominator === 0) {\n return result;\n }\n a = line1StartY - line2StartY;\n b = line1StartX - line2StartX;\n numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n a = numerator1 / denominator;\n b = numerator2 / denominator;\n\n // if we cast these lines infinitely in both directions, they intersect here:\n result.x = line1StartX + (a * (line1EndX - line1StartX));\n result.y = line1StartY + (a * (line1EndY - line1StartY));\n /*\n // it is worth noting that this should be the same as:\n x = line2StartX + (b * (line2EndX - line2StartX));\n y = line2StartX + (b * (line2EndY - line2StartY));\n */\n // if line1 is a segment and line2 is infinite, they intersect if:\n if (a > 0 && a < 1) {\n result.onLine1 = true;\n }\n // if line2 is a segment and line1 is infinite, they intersect if:\n if (b > 0 && b < 1) {\n result.onLine2 = true;\n }\n // if line1 and line2 are segments, they intersect if both of the above are true\n return result;\n}\n\nmodule.exports = {\n\tdrawPath: drawPath,\n\tdrawLine: drawLine,\n\tcheckLineIntersection: checkLineIntersection\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.functions.js\n// module id = 3\n// module chunks = 0","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\nvar Parallel = require('./flowchart.symbol.parallel');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s);\n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n case 'parallel':\n dispSymbols[s.key] = new Parallel(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else if (prevDisp instanceof(Parallel)) {\n if (prev.path1 === s) {\n prevDisp.path1(dispSymb);\n }\n if (prev.path2 === s) {\n prevDisp.path2(dispSymb);\n }\n if (prev.path3 === s) {\n prevDisp.path3(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (dispSymb instanceof(Parallel)) {\n if (s.path1) {\n constructChart(s.path1, dispSymb, s);\n }\n if (s.path2) {\n constructChart(s.path2, dispSymb, s);\n }\n if (s.path3) {\n constructChart(s.path3, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n },\n options: function() {\n return this.diagram.options;\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if (prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getStyle(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '{}';\n }\n\n function getSymbValue(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '';\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)];\n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n \n function getAnnotation(s) {\n\tvar startIndex = s.indexOf(\"(\") + 1, endIndex = s.indexOf(\")\");\n\tvar tmp = s.substring(startIndex, endIndex);\n\tif(tmp.indexOf(\",\") > 0) { tmp = tmp.substring(0, tmp.indexOf(\",\")); }\n\tvar tmp_split = tmp.split(\"@\");\n\tif(tmp_split.length > 1)\n\t\treturn startIndex >= 0 && endIndex >= 0 ? tmp_split[1] : \"\";\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0].trim();\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0].replace(/\\(.*\\)/, ''),\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null,\n function: null,\n lineStyle: {},\n params: {}\n };\n\n //parse parameters\n var params = parts[0].match(/\\((.*)\\)/);\n if (params && params.length > 1){\n var entries = params[1].split(',');\n for(var i = 0; i < entries.length; i++) {\n var entry = entries[i].split('=');\n if (entry.length == 2) {\n symbol.params[entry[0]] = entry[1];\n }\n }\n }\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':$') >= 0) {\n sub = symbol.text.split(':$');\n symbol.text = sub.shift();\n symbol.function = sub.join(':$');\n } else if (symbol.symbolType.indexOf(':$') >= 0) {\n sub = symbol.symbolType.split(':$');\n symbol.symbolType = sub.shift();\n symbol.function = sub.join(':$');\n } else if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n var ann = getAnnotation(line);\n if (ann) {\n line = line.replace('@' + ann, ''); \n }\n // flow\n var flowSymbols = line.split('->');\n for (var iS = 0, lenS = flowSymbols.length; iS < lenS; iS++) {\n var flowSymb = flowSymbols[iS];\n var symbVal = getSymbValue(flowSymb);\n\n if (symbVal === 'true' || symbVal === 'false') {\n // map true or false to yes or no respectively\n flowSymb = flowSymb.replace('true', 'yes');\n flowSymb = flowSymb.replace('false', 'no');\n }\n \n var next = getNextPath(flowSymb);\n var realSymb = getSymbol(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (ann) {\n if (realSymb.symbolType === 'condition') {\n if (next === \"yes\" || next === \"true\") {\n realSymb.yes_annotation = ann;\n } else {\n realSymb.no_annotation = ann;\n }\n } else if (realSymb.symbolType === 'parallel') {\n if (next === 'path1') {\n realSymb.path1_annotation = ann;\n } else if (next === 'path2') {\n realSymb.path2_annotation = ann;\n } else if (next === 'path3') {\n realSymb.path3_annotation = ann;\n }\n }\n ann = null;\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (iS + 1 < lenS) {\n var nextSymb = flowSymbols[iS + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n } else if (line.indexOf('@>') >= 0) {\n\n // line style\n var lineStyleSymbols = line.split('@>');\n for (var iSS = 0, lenSS = lineStyleSymbols.length; iSS < lenSS; iSS++) {\n if ((iSS + 1) !== lenSS) {\n var curSymb = getSymbol(lineStyleSymbols[iSS]);\n var nextSymbol = getSymbol(lineStyleSymbols[iSS+1]);\n\n curSymb['lineStyle'][nextSymbol.key] = JSON.parse(getStyle(lineStyleSymbols[iSS + 1]));\n }\n }\n }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.parse.js\n// module id = 4\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.yes_annotation = options.yes_annotation;\n this.no_annotation = options.no_annotation;\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = options.direction_yes;\n this.no_direction = options.direction_no;\n if (!this.no_direction && this.yes_direction === 'right') {\n this.no_direction = 'bottom';\n } else if (!this.yes_direction && this.no_direction === 'bottom') {\n this.yes_direction = 'right'\n }\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n this.symbol = symbol\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n var self = this;\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n if (self.right_symbol.symbolType === 'end') return;\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n \n if (this.left_symbol) {\n var leftPoint = this.getLeft();\n \n if (!this.left_symbol.isPositioned) {\n this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n \n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n \n if (hasSymbolUnder) {\n if (self.left_symbol.symbolType === 'end') return;\n self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n \n this.left_symbol.isPositioned = true;\n \n this.left_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.yes_annotation ? this.yes_annotation : this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.no_annotation ? this.no_annotation : this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.condition.js\n// module id = 5\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Parallel(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n this.path1_annotation = options.path1_annotation || '';\n this.path2_annotation = options.path2_annotation || '';\n this.path3_annotation = options.path3_annotation || '';\n this.textMargin = this.getAttr('text-margin');\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'top';\n this.params = options.params;\n if (options.direction_next === 'path1' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n if (options.direction_next === 'path2' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n if (options.direction_next === 'path3' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n\n if (options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3) {\n if (options.direction_path1 === 'right') {\n this.path2_direction = 'bottom';\n this.path1_direction = 'right';\n this.path3_direction = 'top';\n } else if (options.direction_path1 === 'top') {\n this.path2_direction = 'right';\n this.path1_direction = 'top';\n this.path3_direction = 'bottom';\n } else if (options.direction_path1 === 'left') {\n this.path2_direction = 'right';\n this.path1_direction = 'left';\n this.path3_direction = 'bottom';\n } else {\n this.path2_direction = 'right';\n this.path1_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else if (options.path1 && !options.direction_path1 && options.path2 && options.direction_path2 && options.path3 && !options.direction_path3) {\n if (options.direction_path2 === 'right') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'top';\n } else if (options.direction_path2 === 'left') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'left';\n this.path3_direction = 'right';\n } else {\n this.path1_direction = 'right';\n this.path2_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else if (options.path1 && !options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && options.direction_path3) {\n if (options.direction_path2 === 'right') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'top';\n this.path3_direction = 'right';\n } else if (options.direction_path2 === 'left') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'left';\n } else {\n this.path1_direction = 'right';\n this.path2_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else {\n this.path1_direction = options.direction_path1;\n this.path2_direction = options.direction_path2;\n this.path3_direction = options.direction_path3;\n }\n\n this.path1_direction = this.path1_direction || 'bottom';\n this.path2_direction = this.path2_direction || 'right';\n this.path3_direction = this.path3_direction || 'top';\n\n this.initialize();\n}\ninherits(Parallel, Symbol);\n\nParallel.prototype.render = function() {\n if (this.path1_direction) {\n this[this.path1_direction + '_symbol'] = this.path1_symbol;\n }\n\n if (this.path2_direction) {\n this[this.path2_direction + '_symbol'] = this.path2_symbol;\n }\n\n if (this.path3_direction) {\n this[this.path3_direction + '_symbol'] = this.path3_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.top_symbol) {\n var topPoint = this.getTop();\n\n if (!this.top_symbol.isPositioned) {\n this.top_symbol.shiftY(this.getY() - this.top_symbol.height - lineLength);\n this.top_symbol.setX(topPoint.x + this.top_symbol.width);\n this.top_symbol.isPositioned = true;\n\n this.top_symbol.render();\n }\n }\n\n var self = this;\n\n if (this.left_symbol) {\n var leftPoint = this.getLeft();\n\n if (!this.left_symbol.isPositioned) {\n this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n if (self.left_symbol.symbolType === 'end') return;\n self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.left_symbol.isPositioned = true;\n\n this.left_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n if (self.right_symbol.symbolType === 'end') return;\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nParallel.prototype.renderLines = function() {\n if (this.path1_symbol) {\n this.drawLineTo(this.path1_symbol, this.path1_annotation, this.path1_direction);\n }\n\n if (this.path2_symbol) {\n this.drawLineTo(this.path2_symbol, this.path2_annotation, this.path2_direction);\n }\n\n if (this.path3_symbol) {\n this.drawLineTo(this.path3_symbol, this.path3_annotation, this.path3_direction);\n }\n};\n\nmodule.exports = Parallel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.parallel.js\n// module id = 6\n// module chunks = 0","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\nvar Parallel = require('./flowchart.symbol.parallel');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if (symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else if (symbol instanceof(Parallel)) {\n symbol.path1 = function(nextSymbol) {\n symbol.path1_symbol = nextSymbol;\n if (symbol.path2_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.path2 = function(nextSymbol) {\n symbol.path2_symbol = nextSymbol;\n if (symbol.path3_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.path3 = function(nextSymbol) {\n symbol.path3_symbol = nextSymbol;\n if (symbol.path1_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n minX = 0,\n minY = 0,\n symbol,\n line;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n var x;\n var y;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n var leftX = symbol.getX()\n x = leftX + symbol.width;\n y = symbol.getY() + symbol.height;\n if (leftX < minX) {\n minX = leftX;\n }\n if (x > maxX) {\n maxX = x;\n }\n if (y > maxY) {\n maxY = y;\n }\n }\n\n for (i = 0, len = this.lines.length; i < len; i++) {\n line = this.lines[i].getBBox();\n x = line.x;\n y = line.y;\n var x2 = line.x2;\n var y2 = line.y2;\n if (x < minX) {\n minX = x;\n }\n if (y < minY) {\n minY = y;\n }\n if (x2 > maxX) {\n maxX = x2;\n }\n if (y2 > maxY) {\n maxY = y2;\n }\n }\n\n var scale = this.options['scale'];\n var lineWidth = this.options['line-width'];\n\n if (this.minXFromSymbols < minX) minX = this.minXFromSymbols;\n\n if (minX < 0) minX -= lineWidth;\n if (minY < 0) minY -= lineWidth;\n\n var width = maxX + lineWidth - minX;\n var height = maxY + lineWidth - minY;\n\n this.paper.setSize(width * scale, height * scale);\n this.paper.setViewBox(minX, minY, width, height, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode && paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.chart.js\n// module id = 7\n// module chunks = 0","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'roundness': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {},\n 'parallel': {}\n } //,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.defaults.js\n// module id = 8\n// module chunks = 0","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.shim.js\n// module id = 9\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.end.js\n// module id = 10\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n this.symbol = symbol\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.inputoutput.js\n// module id = 11\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.operation.js\n// module id = 12\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.start.js\n// module id = 13\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.subroutine.js\n// module id = 14\n// module chunks = 0","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\n\t(function( $ ) {\n\t\tfunction paramFit(needle, haystack) {\n\t\t\treturn needle == haystack ||\n\t\t\t( Array.isArray(haystack) && (haystack.includes(needle) || haystack.includes(Number(needle)) ))\n\t\t}\n\t\tvar methods = {\n\t\t\tinit : function(options) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tthis.chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tthis.chart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t},\n\t\t\tsetFlowStateByParam : function(param, paramValue, newFlowState) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar chart = this.chart;\n\n\t\t\t\t\t// @todo this should be part of Symbol API\n\t\t\t\t\tvar nextSymbolKeys = ['next', 'yes', 'no', 'path1', 'path2', 'path3'];\n\n\t\t\t\t\tfor (var property in chart.symbols) {\n\t\t\t\t\t\tif (chart.symbols.hasOwnProperty(property)) {\n\t\t\t\t\t\t\tvar symbol = chart.symbols[property];\n\t\t\t\t\t\t\tvar val = symbol.params[param];\n\t\t\t\t\t\t\tif (paramFit(val, paramValue)) {\n\t\t\t\t\t\t\t\tsymbol.flowstate = newFlowState;\n\t\t\t\t\t\t\t\tfor (var nski = 0; nski < nextSymbolKeys.length; nski++) {\n\t\t\t\t\t\t\t\t\tvar nextSymbolKey = nextSymbolKeys[nski];\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey] &&\n\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey]['params'] &&\n\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey]['params'][param] &&\n\t\t\t\t\t\t\t\t\t\tparamFit(symbol[nextSymbolKey]['params'][param], paramValue)\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tsymbol.lineStyle[symbol[nextSymbolKey]['key']] = {stroke: chart.options()['flowstate'][newFlowState]['fill']};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tchart.clean();\n\t\t\t\t\tchart.drawSVG(this);\n\t\t\t\t});\n\n\t\t\t},\n\t\t\tclearFlowState: function () {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar chart = this.chart;\n\n\t\t\t\t\tfor (var property in chart.symbols) {\n\t\t\t\t\t\tif (chart.symbols.hasOwnProperty(property)) {\n\t\t\t\t\t\t\tvar node = chart.symbols[property];\n\t\t\t\t\t\t\tnode.flowstate = '';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tchart.clean();\n\t\t\t\t\tchart.drawSVG(this);\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\t$.fn.flowChart = function(methodOrOptions) {\n\t\t\tif ( methods[methodOrOptions] ) {\n\t\t\t\treturn methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 ));\n\t\t\t} else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ) {\n\t\t\t\t// Default to \"init\"\n\t\t\t\treturn methods.init.apply( this, arguments );\n\t\t\t} else {\n\t\t\t\t$.error( 'Method ' + methodOrOptions + ' does not exist on jQuery.flowChart' );\n\t\t\t}\n\t\t};\n\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/jquery-plugin.js\n// module id = 15\n// module chunks = 0","module.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"Raphael\"\n// module id = 16\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.js","webpack:///webpack/bootstrap 2964692b84496f8ebedc","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.symbol.parallel.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_16__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","lineStyle","key","leftLines","rightLines","topLines","bottomLines","params","next_direction","next","undefined","text","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","function","cursor","addEventListener","evt","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","roundness","isNaN","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","self","lineLength","rightPoint","isPositioned","shift","symb","hasSymbolUnder","len","diff","Math","abs","leftPoint","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","yOffset","right","bottom","top","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","max","rightStart","topEnd","bottomStart","diffX","leftStart","topStart","leftEnd","rightEnd","l","llen","lines","otherLine","ePath","lPath","iP","lenP","newPath","line1_from_x","line1_from_y","line1_to_x","line1_to_y","lP","lenlP","newLinePath","line2_from_x","line2_from_y","line2_to_x","line2_to_y","res","onLine1","onLine2","newSegment","splice","minXFromSymbols","maxXFromLine","drawPath","location","points","path","pathValues","from","to","toString","arrow-end","centerText","textPath","textAnchor","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getStyle","s","startIndex","endIndex","getSymbValue","getSymbol","getNextPath","flowSymb","getAnnotation","tmp","tmp_split","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Parallel","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","path1","path2","path3","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","parts","match","entries","entry","sub","join","txtAndState","pop","ann","flowSymbols","iS","lenS","symbVal","realSymb","direction","condOpt","yes_annotation","no_annotation","path1_annotation","path2_annotation","path3_annotation","nextSymb","lineStyleSymbols","iSS","lenSS","curSymb","nextSymbol","JSON","textMargin","yes_direction","direction_yes","no_direction","direction_no","startX","startY","yes_symbol","no_symbol","bottom_symbol","right_symbol","left_symbol","rect","path1_direction","path2_direction","path3_direction","direction_next","direction_path1","direction_path2","direction_path3","path1_symbol","path2_symbol","path3_symbol","top_symbol","topPoint","Raphael","handle","flowChart","maxHeight","maxY","minX","minY","leftX","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","parallel","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","innerWrap","jQuery","$","paramFit","needle","haystack","isArray","includes","methods","init","each","$this","html","setFlowStateByParam","param","paramValue","newFlowState","nextSymbolKeys","property","hasOwnProperty","val","nski","nextSymbolKey","clearFlowState","fn","methodOrOptions","apply","slice","error"],"mappings":";;;;;CAAA,SAAAA,MAAAC;IACA,uBAAAC,WAAA,mBAAAC,QACAA,OAAAD,UAAAD,QAAAG,QAAA,kBACA,yBAAAC,iBAAAC,KACAD,SAAA,aAAAJ,eACA;QACA,IAAAM,IAAAN,QAAA,mBAAAC,UAAAE,QAAA,aAAAJ,KAAA;QACA,SAAAQ,KAAAD,IAAA,mBAAAL,oBAAAF,MAAAQ,KAAAD,EAAAC;;EAECC,MAAA,SAAAC;;IACD,OCAgB,SAAUC;;;;;QCN1B,SAAAC,oBAAAC;;;;;YAGA,IAAAC,iBAAAD;YACA,OAAAC,iBAAAD,UAAAX;;;;;YAGA,IAAAC,SAAAW,iBAAAD;;gBACAX;;gBACAa,IAAAF;;gBACAG,SAAA;;;;;;;;;;;;;;YAUA,OANAL,QAAAE,UAAAI,KAAAd,OAAAD,SAAAC,eAAAD,SAAAU;YAGAT,OAAAa,UAAA,GAGAb,OAAAD;;;;;;QAvBA,IAAAY;;;;;;;;;;;;;;;;;;QAqCA,OATAF,oBAAAM,IAAAP,SAGAC,oBAAAO,IAAAL;QAGAF,oBAAAQ,IAAA,IAGAR,oBAAA;;;;;;IDmBM,SAAUT,QAAQD,SAASU;QEzDjCA,gDAAA;QACA,IAAAS,QAAAT,iDAAA;QACAA,+CAAA;QAEA,IAAAU;YACAD;;QAGA,sBAAAE,WACAA,OAAAC,YAAAF,YAGAnB,OAAAD,UAAAoB;;;;;;IFmEM,SAAUnB,QAAQD;QG/ExB,SAAAuB,UAAAC,SAAAC;YACA,KAAAD,WAAA,qBAAAA,SACA,OAAAC;YAGA,IAAAC;YACA,SAAAC,YAAAF,gBACAC,OAAAC,YAAAF,eAAAE;YAGA,KAAAA,YAAAH,SACAA,QAAAG,cACA,mBAAAD,OAAAC,YACAD,OAAAC,YAAAJ,UAAAG,OAAAC,WAAAH,QAAAG,aAEAD,OAAAC,YAAAH,QAAAG;YAIA,OAAAD;;QAGA,SAAAE,UAAAC,MAAAC;YACA,yBAAAC,OAAA;YAEAF,KAAAG,SAAAF,WACAD,KAAAI,YAAAF,OAAAG,OAAAJ,UAAAG;gBACAE;oBACAC,OAAAP;oBACAQ,aAAA;oBACAC,WAAA;oBACAC,eAAA;;qBAGA;;gBAEAV,KAAAG,SAAAF;gBACA,IAAAU,WAAA;gBACAA,SAAAP,YAAAH,UAAAG,WACAJ,KAAAI,YAAA,IAAAO,YACAX,KAAAI,UAAAE,cAAAN;;;;;QAMA5B,OAAAD;YACAyC,UAAAlB;YACAmB,UAAAd;;;;;;;IH0FM,SAAU3B,QAAQD,SAASU;QItIjC,SAAAiC,OAAAC,OAAApB,SAAAqB;YACAtC,KAAAqC,eACArC,KAAAuC,QAAAvC,KAAAqC,MAAAG,MAAAC,OACAzC,KAAAsC,iBACAtC,KAAA0C;YACA1C,KAAA2C,aAAA1B,QAAA0B,YACA3C,KAAA4C,YAAA3B,QAAA2B,aAAA;YACA5C,KAAA6C,YAAA5B,QAAA4B,iBACA7C,KAAA8C,MAAA7B,QAAA6B,OAAA,IACA9C,KAAA+C;YACA/C,KAAAgD,iBACAhD,KAAAiD,eACAjD,KAAAkD,kBACAlD,KAAAmD,SAAAlC,QAAAkC;YAEAnD,KAAAoD,iBAAAnC,QAAAoC,QAAApC,QAAA,iBAAAA,QAAA,iBAAAqC;YAEAtD,KAAAuD,OAAAvD,KAAAqC,MAAAG,MAAAe,KAAA,MAAAtC,QAAAsC;YAEAtC,QAAA6B,QAAA9C,KAAAuD,KAAAC,KAAAlD,KAAAW,QAAA6B,MAAA,MACA9C,KAAAuD,KAAAC,KAAAC,aAAA,SAAAzD,KAAA0D,QAAA;YAEA1D,KAAAuD,KAAAI;gBACAC,eAAA;gBACAC,GAAA7D,KAAA0D,QAAA;gBACAI,MAAA9D,KAAA0D,QAAA;gBACAK,aAAA/D,KAAA0D,QAAA;;YAGA,IAAAM,OAAAhE,KAAA0D,QAAA,SACAO,QAAAjE,KAAA0D,QAAA,gBACAQ,QAAAlE,KAAA0D,QAAA;YAEAM,QAAAhE,KAAAuD,KAAAI;gBAAAK;gBACAC,SAAAjE,KAAAuD,KAAAI;gBAAAQ,eAAAF;gBACAC,SAAAlE,KAAAuD,KAAAI;gBAAAS,eAAAF;gBAEAjD,QAAAoD,QAAArE,KAAAuD,KAAAI,KAAA,QAAA1C,QAAAoD;YAGApD,QAAAqD,aACAtE,KAAAuD,KAAAI;gBAAAY,QAAA;gBAEAvE,KAAAuD,KAAAC,KAAAgB,iBAAA,kBAAAC;gBACA3D,OAAAG,QAAAqD,UAAAG,KAAAxD;gBACA,KAGAA,QAAAyD,UAAA1E,KAAAuD,KAAAI,KAAA,UAAA1C,QAAAyD;YAEA,IAAAC,WAAA3E,KAAA0D,QAAA;YACA,IAAAiB,UAAA;gBAIA,SAFAC,QAAA3D,QAAAsC,KAAAsB,MAAA,MACAC,WAAA,IACA/E,IAAA,GAAAgF,KAAAH,MAAAI,QAAAjF,IAAAgF,IAAAhF,KAAA;oBACA,IAAAkF,OAAAL,MAAA7E;oBACAC,KAAAuD,KAAAI,KAAA,QAAAmB,WAAA,MAAAG,OAEAH,YADA9E,KAAAuD,KAAA2B,UAAAC,QAAAR,WACA,OAAAM,OAEA,MAAAA;;gBAGAjF,KAAAuD,KAAAI,KAAA,QAAAmB,SAAAM,UAAA;;YAKA,IAFApF,KAAAuC,MAAA8C,KAAArF,KAAAuD,OAEAjB,QAAA;gBACA,IAAAgD,YAAAtF,KAAA0D,QAAA;gBAEApB,OAAAqB;oBACAG,MAAA9D,KAAA0D,QAAA;oBACA6B,QAAAvF,KAAA0D,QAAA;oBACA8B,gBAAAxF,KAAA0D,QAAA;oBACAyB,OAAAnF,KAAAuD,KAAA2B,UAAAC,QAAA,IAAAG;oBACAG,QAAAzF,KAAAuD,KAAA2B,UAAAO,SAAA,IAAAH;oBAGAhD,OAAAkB,KAAAC,aAAA,SAAAzD,KAAA0D,QAAA;gBACA,IAAAgC,YAAA1F,KAAA0D,QAAA;gBACAiC,MAAAD,eACApD,OAAAkB,KAAAC,aAAA,MAAAiC,YACApD,OAAAkB,KAAAC,aAAA,MAAAiC;gBAGAzE,QAAAoD,QAAA/B,OAAAqB,KAAA,QAAA1C,QAAAoD,OACApD,QAAAyD,UAAApC,OAAAqB,KAAA,UAAA1C,QAAAyD;;gBAGAzD,QAAAqD,aACAhC,OAAAkB,KAAAgB,iBAAA,kBAAAC;oBACA3D,OAAAG,QAAAqD,UAAAG,KAAAxD;oBACA,IACAqB,OAAAqB;oBAAAY,QAAA;qBAEAtD,QAAA6B,QAAAR,OAAAkB,KAAAlD,KAAAW,QAAA6B,MAEA9C,KAAAuC,MAAA8C,KAAA/C,SACAA,OAAAsD,aAAA5F,KAAAuD;gBAEAvD,KAAAuD,KAAAI;oBACAkC,GAAAvD,OAAA4C,UAAAO,SAAA;oBAGAzF,KAAA8F;;;QA9GA,IAAAC,UAAA5F,iDAAA,IACA6F,WAAAD,QAAAC,UACAC,wBAAAF,QAAAE;;QAkHA7D,OAAAV,UAAAgC,UAAA,SAAAwC;YACA,IAAAlG,KAAAqC,OAAA;gBAGA,IAEA8D,MAFAC,OAAApG,KAAAqC,MAAA,UAAArC,KAAAqC,MAAApB,QAAAiF,WAAA5C,QACA+C,OAAArG,KAAAqC,MAAApB,QAAA,UAAAjB,KAAAqC,MAAApB,QAAAqF,QAAAtG,KAAA2C,YAAAuD,WAAA5C;gBAKA,OAHAtD,KAAAqC,MAAApB,QAAA2B,aAAA5C,KAAAqC,MAAApB,QAAA2B,UAAA5C,KAAA4C,eACAuD,OAAAnG,KAAAqC,MAAApB,QAAA2B,UAAA5C,KAAA4C,WAAAsD;gBAEAC,QAAAE,QAAAD;;WAGAhE,OAAAV,UAAAoE,aAAA;YACA9F,KAAAuC,MAAAgE,UAAA,MAAAvG,KAAA0D,QAAA,sBAAA1D,KAAA0D,QAAA;YAEA1D,KAAAmF,QAAAnF,KAAAuC,MAAA2C,UAAAC,OACAnF,KAAAyF,SAAAzF,KAAAuC,MAAA2C,UAAAO;WAGArD,OAAAV,UAAA8E,YAAA;YACA;gBAAA3C,GAAA7D,KAAAyG,SAAAzG,KAAAmF,QAAA;gBACAU,GAAA7F,KAAA0G,SAAA1G,KAAAyF,SAAA;;WAGArD,OAAAV,UAAA+E,OAAA;YACA,OAAAzG,KAAAuC,MAAA2C,UAAArB;WAGAzB,OAAAV,UAAAgF,OAAA;YACA,OAAA1G,KAAAuC,MAAA2C,UAAAW;WAGAzD,OAAAV,UAAAiF,SAAA,SAAA9C;YACA7D,KAAAuC,MAAAgE,UAAA,OAAAvG,KAAAyG,SAAA5C,KAAA,MAAA7D,KAAA0G;WAGAtE,OAAAV,UAAAkF,OAAA,SAAA/C;YACA7D,KAAAuC,MAAAgE,UAAA,MAAA1C,IAAA,MAAA7D,KAAA0G;WAGAtE,OAAAV,UAAAmF,SAAA,SAAAhB;YACA7F,KAAAuC,MAAAgE,UAAA,MAAAvG,KAAAyG,SAAA,OAAAzG,KAAA0G,SAAAb;WAGAzD,OAAAV,UAAAoF,OAAA,SAAAjB;YACA7F,KAAAuC,MAAAgE,UAAA,MAAAvG,KAAAyG,SAAA,MAAAZ;WAGAzD,OAAAV,UAAAqF,SAAA;YACA,IAAAlB,IAAA7F,KAAA0G,QACA7C,IAAA7D,KAAAyG,SAAAzG,KAAAmF,QAAA;YACA;gBAAAtB;gBAAAgC;;WAGAzD,OAAAV,UAAAsF,YAAA;YACA,IAAAnB,IAAA7F,KAAA0G,SAAA1G,KAAAyF,QACA5B,IAAA7D,KAAAyG,SAAAzG,KAAAmF,QAAA;YACA;gBAAAtB;gBAAAgC;;WAGAzD,OAAAV,UAAAuF,UAAA;YACA,IAAApB,IAAA7F,KAAA0G,SAAA1G,KAAAuC,MAAA2C,UAAAO,SAAA,GACA5B,IAAA7D,KAAAyG;YACA;gBAAA5C;gBAAAgC;;WAGAzD,OAAAV,UAAAwF,WAAA;YACA,IAAArB,IAAA7F,KAAA0G,SAAA1G,KAAAuC,MAAA2C,UAAAO,SAAA,GACA5B,IAAA7D,KAAAyG,SAAAzG,KAAAuC,MAAA2C,UAAAC;YACA;gBAAAtB;gBAAAgC;;WAGAzD,OAAAV,UAAAyF,SAAA;YACA,IAAAnH,KAAAqD,MAAA;gBAEA,IAAA+D,OAAApH,MACAqH,aAAArH,KAAA0D,QAAA;gBAEA,gBAAA1D,KAAAoD,gBAAA;oBAEA,IAAAkE,aAAAtH,KAAAkH;oBAEAlH,KAAAqD,KAAAkE,iBACAvH,KAAAqD,KAAAyD,KAAAQ,WAAAzB,IAAA7F,KAAAqD,KAAAoC,SAAA;oBACAzF,KAAAqD,KAAAsD,OAAA3G,KAAAuC,MAAA2C,UAAArB,IAAA7D,KAAAmF,QAAAkC,aAEA,SAAAG;wBAGA,SADAC,MADAC,kBAAA,GAEA3H,IAAA,GAAA4H,MAAAP,KAAA/E,MAAAiE,QAAAtB,QAAAjF,IAAA4H,KAAA5H,KAAA;4BACA0H,OAAAL,KAAA/E,MAAAiE,QAAAvG;4BAEA,IAAA6H,OAAAC,KAAAC,IAAAL,KAAAjB,YAAA3C,IAAAuD,KAAA/D,KAAAmD,YAAA3C;4BACA,IAAA4D,KAAAjB,YAAAX,IAAAuB,KAAA/D,KAAAmD,YAAAX,KAAA+B,QAAAR,KAAA/D,KAAA8B,QAAA;gCACAuC,kBAAA;gCACA;;;wBAIA,IAAAA,gBAAA;4BACA,cAAAN,KAAA/D,KAAAV,YAAA;4BACAyE,KAAA/D,KAAAuD,KAAAa,KAAAhB,SAAAgB,KAAAtC,QAAAkC,aACAG;;yBAIAxH,KAAAqD,KAAAkE,gBAAA,GAEAvH,KAAAqD,KAAA8D;uBAEA,eAAAnH,KAAAoD,gBAAA;oBAEA,IAAA2E,YAAA/H,KAAAiH;oBAEAjH,KAAAqD,KAAAkE,iBACAvH,KAAAqD,KAAAyD,KAAAiB,UAAAlC,IAAA7F,KAAAqD,KAAAoC,SAAA,IACAzF,KAAAqD,KAAAsD,SAAA3G,KAAAuC,MAAA2C,UAAArB,IAAA7D,KAAAmF,QAAAkC;oBAEA,SAAAG;wBAGA,SADAC,MADAC,kBAAA,GAEA3H,IAAA,GAAA4H,MAAAP,KAAA/E,MAAAiE,QAAAtB,QAAAjF,IAAA4H,KAAA5H,KAAA;4BACA0H,OAAAL,KAAA/E,MAAAiE,QAAAvG;4BAEA,IAAA6H,OAAAC,KAAAC,IAAAL,KAAAjB,YAAA3C,IAAAuD,KAAA/D,KAAAmD,YAAA3C;4BACA,IAAA4D,KAAAjB,YAAAX,IAAAuB,KAAA/D,KAAAmD,YAAAX,KAAA+B,QAAAR,KAAA/D,KAAA8B,QAAA;gCACAuC,kBAAA;gCACA;;;wBAIA,IAAAA,gBAAA;4BACA,cAAAN,KAAA/D,KAAAV,YAAA;4BACAyE,KAAA/D,KAAAuD,KAAAa,KAAAhB,SAAAgB,KAAAtC,QAAAkC,aACAG;;yBAIAxH,KAAAqD,KAAAkE,gBAAA,GAEAvH,KAAAqD,KAAA8D;uBAEA;oBACA,IAAAa,cAAAhI,KAAAgH;oBAEAhH,KAAAqD,KAAAkE,iBACAvH,KAAAqD,KAAAwD,OAAA7G,KAAA0G,SAAA1G,KAAAyF,SAAA4B;oBACArH,KAAAqD,KAAAuD,KAAAoB,YAAAnE,IAAA7D,KAAAqD,KAAA8B,QAAA,IACAnF,KAAAqD,KAAAkE,gBAAA;oBAEAvH,KAAAqD,KAAA8D;;;WAMA/E,OAAAV,UAAAuG,cAAA;YACAjI,KAAAqD,SACArD,KAAAoD,iBACApD,KAAAkI,WAAAlI,KAAAqD,MAAArD,KAAA0D,QAAA,qBAAA1D,KAAAoD,kBAEApD,KAAAkI,WAAAlI,KAAAqD,MAAArD,KAAA0D,QAAA;WAKAtB,OAAAV,UAAAwG,aAAA,SAAA5F,QAAAiB,MAAA4E;YACAnI,KAAA0C,YAAA0F,QAAA9F,UAAA,KACAtC,KAAA0C,YAAA2C,KAAA/C;YAGA,IAqBA+F,MACAC,SAtBAzE,IAAA7D,KAAAwG,YAAA3C,GACAgC,IAAA7F,KAAAwG,YAAAX,GACA0C,QAAAvI,KAAAkH,YACAsB,SAAAxI,KAAAgH,aACAyB,MAAAzI,KAAA+G,UACA2B,OAAA1I,KAAAiH,WAEA0B,UAAArG,OAAAkE,YAAA3C,GACA+E,UAAAtG,OAAAkE,YAAAX,GACAgD,YAAAvG,OAAAyE,UACA+B,cAAAxG,OAAA4E,YACA6B,aAAAzG,OAAA2E,WAEA+B,iBAAAnF,MAAA8E,SACAM,eAAApD,MAAA+C,SACAM,UAAArD,IAAA+C,SACAO,UAAAtD,IAAA+C,WAAA5I,SAAAsC,QACA8G,SAAAvF,IAAA8E,SACAU,UAAAxF,IAAA8E,SAEAW,OAAA,GAGAjC,aAAArH,KAAA0D,QAAA,gBACA6F,WAAAvJ,KAAA0D,QAAA;YAEA,IAAAyE,UAAA,aAAAA,WAAAa,mBAAAE,SAeA,IAAAf,UAAA,YAAAA,WAAAc,iBAAAI,SAiBA,IAAAlB,UAAA,WAAAA,WAAAc,iBAAAG,QAiBA,IAAAjB,UAAA,YAAAA,WAAAa,mBAAAG,SAaA,IAAAhB,UAAA,YAAAA,WAAAa,mBAAAE,SAaA,IAAAf,UAAA,aAAAA,WAAAiB,QAsBA,IAAAjB,UAAA,aAAAA,WAAAkB,YAAAH,SAaA,IAAAf,UAAA,aAAAA,WAAAkB,SAcA,IAAAlB,UAAA,YAAAA,UAAAiB,QACAd,UAAA,KAAAT,KAAA2B,IAAAlH,OAAAW,SAAA+B,QAAAhF,KAAAgD,WAAAgC;YACAqD,OAAArC,SAAAhG,KAAAqC,OAAAkG;gBACA1E,GAAA0E,MAAA1E,IAAAwD,aAAA;gBAAAxB,GAAA0C,MAAA1C;;gBACAhC,GAAA0E,MAAA1E,IAAAwD,aAAA;gBAAAxB,GAAAgD,UAAAhD,IAAAwB,aAAA,IAAAiB;;gBACAzE,GAAAgF,UAAAhF;gBAAAgC,GAAAgD,UAAAhD,IAAAwB,aAAA,IAAAiB;;gBACAzE,GAAAgF,UAAAhF;gBAAAgC,GAAAgD,UAAAhD;iBACAtC,OACAvD,KAAAgD,WAAAqC,KAAAgD,OACA/F,OAAAW,SAAAoC,KAAAgD,OACArI,KAAAyJ,cAAA;YACAnH,OAAAoH,UAAA,GACAJ,OAAAf,MAAA1E,IAAAwD,aAAA,QACA,IAAAc,UAAA,YAAAA,UAAAkB,SACAf,UAAA,KAAAT,KAAA2B,IAAAlH,OAAAW,SAAA+B,QAAAhF,KAAAgD,WAAAgC;YACAqD,OAAArC,SAAAhG,KAAAqC,OAAAkG;gBACA1E,GAAAgF,UAAAhF;gBAAAgC,GAAA0C,MAAA1C,IAAAyC;;gBACAzE,GAAAgF,UAAAhF;gBAAAgC,GAAAgD,UAAAhD,IAAAyC;iBACA/E,OACAvD,KAAAgD,WAAAqC,KAAAgD,OACA/F,OAAAW,SAAAoC,KAAAgD,OACArI,KAAAyJ,cAAA;YACAnH,OAAAoH,UAAA,GACAJ,OAAAf,MAAA1E,IAAAwD,aAAA,QACA,IAAAc,UAAA,aAAAA,UAAAa,kBAAAG,SACAb,UAAA,KAAAT,KAAA2B,IAAAlH,OAAAW,SAAA+B,QAAAhF,KAAAkD,YAAA8B;YACAqD,OAAArC,SAAAhG,KAAAqC,OAAAmG;gBACA3E,GAAA2E,OAAA3E;gBAAAgC,GAAA2C,OAAA3C,IAAAwB,aAAA,IAAAiB;;gBACAzE,GAAA0E,MAAA1E,IAAAwD,aAAA;gBAAAxB,GAAA2C,OAAA3C,IAAAwB,aAAA,IAAAiB;;gBACAzE,GAAA0E,MAAA1E,IAAAwD,aAAA;gBAAAxB,GAAAgD,UAAAhD,IAAAwB,aAAA,IAAAiB;;gBACAzE,GAAAgF,UAAAhF;gBAAAgC,GAAAgD,UAAAhD,IAAAwB,aAAA,IAAAiB;;gBACAzE,GAAAgF,UAAAhF;gBAAAgC,GAAAgD,UAAAhD;iBACAtC,OACAvD,KAAAkD,YAAAmC,KAAAgD,OACA/F,OAAAW,SAAAoC,KAAAgD,OACArI,KAAA2J,eAAA;YACArH,OAAAoH,UAAA,GACAJ,OAAAd,OAAA3E,IAAAwD,aAAA,QACA,eAAAc,UAAAa,kBAAAG,SAAA;gBACA,IAAAS,QAAAlB,KAAA7E,IAAAwD,aAAA;gBACA0B,WAAAlF,IAAA6E,KAAA7E,MACA+F,QAAAb,WAAAlF,IAAAwD,aAAA,IAEAiB,UAAA,KAAAT,KAAA2B,IAAAlH,OAAAW,SAAA+B,QAAAhF,KAAA+C,UAAAiC;gBACAqD,OAAArC,SAAAhG,KAAAqC,OAAAqG;oBACA7E,GAAA+F;oBAAA/D,GAAA6C,KAAA7C,IAAAyC;;oBACAzE,GAAA+F;oBAAA/D,GAAAgD,UAAAhD,IAAAwB,aAAA,IAAAiB;;oBACAzE,GAAAgF,UAAAhF;oBAAAgC,GAAAgD,UAAAhD,IAAAwB,aAAA,IAAAiB;;oBACAzE,GAAAgF,UAAAhF;oBAAAgC,GAAAgD,UAAAhD;qBACAtC,OACAvD,KAAA+C,UAAAsC,KAAAgD,OACA/F,OAAAW,SAAAoC,KAAAgD,OACArI,KAAA6J,aAAA;gBACAvH,OAAAoH,UAAA,GACAJ,OAAAZ,KAAA7E;mBACA,WAAAsE,UACAG,UAAA,KAAAT,KAAA2B,IAAAlH,OAAAW,SAAA+B,QAAAhF,KAAA+C,UAAAiC;YACAqD,OAAArC,SAAAhG,KAAAqC,OAAAqG;gBACA7E,GAAAgF,UAAAhF,KAAA6E,KAAA7E,IAAAgF,UAAAhF,KAAA;gBAAAgC,GAAA6C,KAAA7C;;gBACAhC,GAAAgF,UAAAhF,KAAA6E,KAAA7E,IAAAgF,UAAAhF,KAAA;gBAAAgC,GAAAgD,UAAAhD,IAAAwB,aAAA,IAAAiB;;gBACAzE,GAAAgF,UAAAhF;gBAAAgC,GAAAgD,UAAAhD,IAAAwB,aAAA,IAAAiB;;gBACAzE,GAAAgF,UAAAhF;gBAAAgC,GAAAgD,UAAAhD;iBACAtC,OACAvD,KAAA+C,UAAAsC,KAAAgD,OACA/F,OAAAW,SAAAoC,KAAAgD,OACArI,KAAA6J,aAAA;YACAvH,OAAAoH,UAAA,GACAJ,OAAAZ,KAAA7E,KACA,UAAAsE,WACAG,UAAA,KAAAT,KAAA2B,IAAAlH,OAAAW,SAAA+B,QAAAhF,KAAAiD,SAAA+B;YACAqD,OAAArC,SAAAhG,KAAAqC,OAAAoG;gBACA5E,GAAA4E,IAAA5E;gBAAAgC,GAAAgD,UAAAhD,IAAAwB,aAAA,IAAAiB;;gBACAzE,GAAAgF,UAAAhF;gBAAAgC,GAAAgD,UAAAhD,IAAAwB,aAAA,IAAAiB;;gBACAzE,GAAAgF,UAAAhF;gBAAAgC,GAAAgD,UAAAhD;iBACAtC,OACAvD,KAAAiD,SAAAoC,KAAAgD,OACA/F,OAAAW,SAAAoC,KAAAgD,OACArI,KAAA8J,YAAA;YACAxH,OAAAoH,UAAA,GACAJ,OAAAb,IAAA5E,SA5FAyE,UAAA,KAAAT,KAAA2B,IAAAlH,OAAAW,SAAA+B,QAAAhF,KAAAkD,YAAA8B;YACAqD,OAAArC,SAAAhG,KAAAqC,OAAAmG;gBACA3E,GAAA2E,OAAA3E;gBAAAgC,GAAA2C,OAAA3C,IAAAwB,aAAA,IAAAiB;;gBACAzE,GAAA2E,OAAA3E,KAAA2E,OAAA3E,IAAAgF,UAAAhF,KAAA;gBAAAgC,GAAA2C,OAAA3C,IAAAwB,aAAA,IAAAiB;;gBACAzE,GAAA2E,OAAA3E,KAAA2E,OAAA3E,IAAAgF,UAAAhF,KAAA;gBAAAgC,GAAAgD,UAAAhD,IAAAwB,aAAA,IAAAiB;;gBACAzE,GAAAgF,UAAAhF;gBAAAgC,GAAAgD,UAAAhD,IAAAwB,aAAA,IAAAiB;;gBACAzE,GAAAgF,UAAAhF;gBAAAgC,GAAAgD,UAAAhD;iBACAtC,OACAvD,KAAAkD,YAAAmC,KAAAgD,OACA/F,OAAAW,SAAAoC,KAAAgD,OACArI,KAAA2J,eAAA;YACArH,OAAAoH,UAAA,GACAJ,OAAAd,OAAA3E,KAAA2E,OAAA3E,IAAAgF,UAAAhF,KAAA,QAzBAyE,UAAA,KAAAT,KAAA2B,IAAAlH,OAAAW,SAAA+B,QAAAhF,KAAAkD,YAAA8B;YACAqD,OAAArC,SAAAhG,KAAAqC,OAAAmG;gBACA3E,GAAA2E,OAAA3E;gBAAAgC,GAAAgD,UAAAhD,IAAAwB,aAAA,IAAAiB;;gBACAzE,GAAAgF,UAAAhF;gBAAAgC,GAAAgD,UAAAhD,IAAAwB,aAAA,IAAAiB;;gBACAzE,GAAAgF,UAAAhF;gBAAAgC,GAAAgD,UAAAhD;iBACAtC,OACAvD,KAAAkD,YAAAmC,KAAAgD,OACA/F,OAAAW,SAAAoC,KAAAgD,OACArI,KAAA2J,eAAA;YACArH,OAAAoH,UAAA,GACAJ,OAAAd,OAAA3E,GACAgF,UAAAhF,IAAAyF,gBAAAT,UAAAhF,SAjCAyE,UAAA,KAAAT,KAAA2B,IAAAlH,OAAAW,SAAA+B,QAAAhF,KAAAkD,YAAA8B;YAEAqD,OADArI,KAAA+J,WAAAZ,UACAnD,SAAAhG,KAAAqC,OAAAmG;gBACA3E,GAAA2E,OAAA3E;gBAAAgC,GAAA2C,OAAA3C,IAAAwB,aAAA,IAAAiB;;gBACAzE,GAAA2E,OAAA3E,KAAA2E,OAAA3E,IAAAgF,UAAAhF,KAAA;gBAAAgC,GAAA2C,OAAA3C,IAAAwB,aAAA,IAAAiB;;gBACAzE,GAAA2E,OAAA3E,KAAA2E,OAAA3E,IAAAgF,UAAAhF,KAAA;gBAAAgC,GAAAgD,UAAAhD,IAAAwB,aAAA,IAAAiB;;gBACAzE,GAAAgF,UAAAhF;gBAAAgC,GAAAgD,UAAAhD,IAAAwB,aAAA,IAAAiB;;gBACAzE,GAAAgF,UAAAhF;gBAAAgC,GAAAgD,UAAAhD;iBACAtC,QAEAyC,SAAAhG,KAAAqC,OAAAmG;gBACA3E,GAAA2E,OAAA3E;gBAAAgC,GAAAgD,UAAAhD,IAAAwB,aAAA,IAAAiB;;gBACAzE,GAAAgF,UAAAhF;gBAAAgC,GAAAgD,UAAAhD,IAAAwB,aAAA,IAAAiB;;gBACAzE,GAAAgF,UAAAhF;gBAAAgC,GAAAgD,UAAAhD;iBACAtC,OAEAvD,KAAAkD,YAAAmC,KAAAgD,OACA/F,OAAAW,SAAAoC,KAAAgD,OACArI,KAAA2J,eAAA;YACArH,OAAAoH,UAAA,GACAJ,OAAAd,OAAA3E,KAAA2E,OAAA3E,IAAAgF,UAAAhF,KAAA,QAjCAyE,UAAA,KAAAT,KAAA2B,IAAAlH,OAAAW,SAAA+B,QAAAhF,KAAAgD,WAAAgC;YACAqD,OAAArC,SAAAhG,KAAAqC,OAAAkG;gBACA1E,GAAA0E,MAAA1E,IAAAwD,aAAA;gBAAAxB,GAAA0C,MAAA1C,IAAAyC;;gBACAzE,GAAA0E,MAAA1E,IAAAwD,aAAA;gBAAAxB,GAAAgD,UAAAhD,IAAAwB,aAAA,IAAAiB;;gBACAzE,GAAAgF,UAAAhF;gBAAAgC,GAAAgD,UAAAhD,IAAAwB,aAAA,IAAAiB;;gBACAzE,GAAAgF,UAAAhF;gBAAAgC,GAAAgD,UAAAhD;iBACAtC,OACAvD,KAAAgD,WAAAqC,KAAAgD,OACA/F,OAAAW,SAAAoC,KAAAgD,OACArI,KAAAyJ,cAAA;YACAnH,OAAAoH,UAAA,GACAJ,OAAAf,MAAA1E,IAAAwD,aAAA,QAxBAiB,UAAA,KAAAT,KAAA2B,IAAAlH,OAAAW,SAAA+B,QAAAhF,KAAAgD,WAAAgC;YACAqD,OAAArC,SAAAhG,KAAAqC,OAAAkG;gBACA1E,GAAA0E,MAAA1E,IAAAwD,aAAA;gBAAAxB,GAAA0C,MAAA1C,IAAAyC;;gBACAzE,GAAA0E,MAAA1E,IAAAwD,aAAA;gBAAAxB,GAAAgD,UAAAhD,IAAAwB,aAAA,IAAAiB;;gBACAzE,GAAAgF,UAAAhF;gBAAAgC,GAAAgD,UAAAhD,IAAAwB,aAAA,IAAAiB;;gBACAzE,GAAAgF,UAAAhF;gBAAAgC,GAAAgD,UAAAhD;iBACAtC,OACAvD,KAAAgD,WAAAqC,KAAAgD,OACA/F,OAAAW,SAAAoC,KAAAgD,OACArI,KAAAyJ,cAAA;YACAnH,OAAAoH,UAAA,GACAJ,OAAAf,MAAA1E,IAAAwD,aAAA,QA5BA,MAAA/E,OAAAU,WAAAgC,UAAA,MAAAhF,KAAA+C,UAAAiC,SACAqD,OAAArC,SAAAhG,KAAAqC,OAAAqG,MAAAI,aAAAvF,SAEA+E,UAAA,KAAAT,KAAA2B,IAAAlH,OAAAU,WAAAgC,QAAAhF,KAAA+C,UAAAiC;YACAqD,OAAArC,SAAAhG,KAAAqC,OAAAkG;gBACA1E,GAAA0E,MAAA1E;gBAAAgC,GAAA0C,MAAA1C,IAAAyC;;gBACAzE,GAAA0E,MAAA1E;gBAAAgC,GAAAiD,YAAAjD,IAAAyC;;gBACAzE,GAAAiF,YAAAjF;gBAAAgC,GAAAiD,YAAAjD,IAAAyC;;gBACAzE,GAAAiF,YAAAjF;gBAAAgC,GAAAiD,YAAAjD;iBACAtC,QAEAvD,KAAA+C,UAAAsC,KAAAgD,OACA/F,OAAAU,WAAAqC,KAAAgD,OACArI,KAAA6J,aAAA;YACAvH,OAAA0H,YAAA,GACAV,OAAAR,YAAAjF,QAhCA,MAAAvB,OAAAS,UAAAiC,UAAA,MAAAhF,KAAAgD,WAAAgC,SACAqD,OAAArC,SAAAhG,KAAAqC,OAAAkG,OAAAQ,YAAAxF,SAEA+E,UAAA,KAAAT,KAAA2B,IAAAlH,OAAAS,UAAAiC,QAAAhF,KAAAgD,WAAAgC;YACAqD,OAAArC,SAAAhG,KAAAqC,OAAAkG;gBACA1E,GAAA0E,MAAA1E;gBAAAgC,GAAA0C,MAAA1C,IAAAyC;;gBACAzE,GAAA0E,MAAA1E;gBAAAgC,GAAAkD,WAAAlD,IAAAyC;;gBACAzE,GAAAkF,WAAAlF;gBAAAgC,GAAAkD,WAAAlD,IAAAyC;;gBACAzE,GAAAkF,WAAAlF;gBAAAgC,GAAAkD,WAAAlD;iBACAtC,QAEAvD,KAAAgD,WAAAqC,KAAAgD,OACA/F,OAAAS,UAAAsC,KAAAgD,OACArI,KAAAyJ,cAAA;YACAnH,OAAAyH,WAAA,GACAT,OAAAP,WAAAlF,QA9BA,MAAAvB,OAAAW,SAAA+B,UAAA,MAAAhF,KAAAkD,YAAA8B,SACAqD,OAAArC,SAAAhG,KAAAqC,OAAAmG,QAAAK,WAAAtF,SAEA+E,UAAA,KAAAT,KAAA2B,IAAAlH,OAAAW,SAAA+B,QAAAhF,KAAAkD,YAAA8B;YACAqD,OAAArC,SAAAhG,KAAAqC,OAAAmG;gBACA3E,GAAAgF,UAAAhF;gBAAAgC,GAAAgD,UAAAhD,IAAAyC;;gBACAzE,GAAAgF,UAAAhF;gBAAAgC,GAAAgD,UAAAhD;iBACAtC,QAEAvD,KAAAkD,YAAAmC,KAAAgD,OACA/F,OAAAW,SAAAoC,KAAAgD,OACArI,KAAA2J,eAAA;YACArH,OAAAoH,UAAA,GACAJ,OAAAd,OAAA3E;YAqMA;YAJA7D,KAAA6C,UAAAP,OAAAQ,QAAAuF,QACAA,KAAA1E,KAAA3D,KAAA6C,UAAAP,OAAAQ,OAGAuF,MAAA;gBACA,SAAA4B,IAAA,GAAAC,OAAAlK,KAAAqC,MAAA8H,MAAAnF,QAAAiF,IAAAC,MAAAD,KAMA,SALAG,YAAApK,KAAAqC,MAAA8H,MAAAF,IAEAI,QAAAD,UAAAzG,KAAA,SACA2G,QAAAjC,KAAA1E,KAAA,SAEA4G,KAAA,GAAAC,OAAAH,MAAArF,SAAA,GAAAuF,KAAAC,MAAAD,MAAA;oBACA,IAAAE;oBACAA,QAAApF,OAAA,KAAAgF,MAAAE,IAAA,IAAAF,MAAAE,IAAA,OACAE,QAAApF,OAAA,KAAAgF,MAAAE,KAAA,OAAAF,MAAAE,KAAA;oBAOA,SALAG,eAAAD,QAAA,OACAE,eAAAF,QAAA,OACAG,aAAAH,QAAA,OACAI,aAAAJ,QAAA,OAEAK,KAAA,GAAAC,QAAAT,MAAAtF,SAAA,GAAA8F,KAAAC,OAAAD,MAAA;wBACA,IAAAE;wBACAA,YAAA3F,OAAA,KAAAiF,MAAAQ,IAAA,IAAAR,MAAAQ,IAAA,OACAE,YAAA3F,OAAA,KAAAiF,MAAAQ,KAAA,OAAAR,MAAAQ,KAAA;wBAEA,IAAAG,eAAAD,YAAA,OACAE,eAAAF,YAAA,OACAG,aAAAH,YAAA,OACAI,aAAAJ,YAAA,OAEAK,MAAApF,sBAAAyE,cAAAC,cAAAC,YAAAC,YAAAI,cAAAC,cAAAC,YAAAC;wBACA,IAAAC,IAAAC,WAAAD,IAAAE,SAAA;4BAEA,IAAAC;4BACAN,iBAAAE,aACAH,eAAAE,cACAK,eAAA,KAAAH,IAAAxH,IAAA,IAAA0F,UAAA2B;4BACAZ,MAAAmB,OAAAX,KAAA,MAAAU,aACAA,eAAA,KAAAH,IAAAxH,IAAA,IAAA0F,UAAA2B,cAAAG,IAAAxH,GAAAqH,eAAA,IAAA3B,UAAA8B,IAAAxH,IAAA,IAAA0F,UAAA2B;4BACAZ,MAAAmB,OAAAX,KAAA,MAAAU,aACAnD,KAAA1E,KAAA,QAAA2G,WAEAkB,eAAA,KAAAH,IAAAxH,IAAA,IAAA0F,UAAA2B;4BACAZ,MAAAmB,OAAAX,KAAA,MAAAU,aACAA,eAAA,KAAAH,IAAAxH,IAAA,IAAA0F,UAAA2B,cAAAG,IAAAxH,GAAAqH,eAAA,IAAA3B,UAAA8B,IAAAxH,IAAA,IAAA0F,UAAA2B;4BACAZ,MAAAmB,OAAAX,KAAA,MAAAU,aACAnD,KAAA1E,KAAA,QAAA2G,UAGAY,eAAAE,cACAI,eAAA,KAAAP,cAAAI,IAAAxF,IAAA,IAAA0D;4BACAe,MAAAmB,OAAAX,KAAA,MAAAU,aACAA,eAAA,KAAAP,cAAAI,IAAAxF,IAAA,IAAA0D,UAAA0B,eAAA,IAAA1B,UAAA8B,IAAAxF,GAAAoF,cAAAI,IAAAxF,IAAA,IAAA0D;4BACAe,MAAAmB,OAAAX,KAAA,MAAAU,aACAnD,KAAA1E,KAAA,QAAA2G,WAEAkB,eAAA,KAAAP,cAAAI,IAAAxF,IAAA,IAAA0D;4BACAe,MAAAmB,OAAAX,KAAA,MAAAU,aACAA,eAAA,KAAAP,cAAAI,IAAAxF,IAAA,IAAA0D,UAAA0B,eAAA,IAAA1B,UAAA8B,IAAAxF,GAAAoF,cAAAI,IAAAxF,IAAA,IAAA0D;4BACAe,MAAAmB,OAAAX,KAAA,MAAAU,aACAnD,KAAA1E,KAAA,QAAA2G,SAIAQ,MAAA;;;;gBAMA9K,KAAAqC,MAAA8H,MAAA9E,KAAAgD,QACA/E,WAAAtD,KAAAqC,MAAAqJ,mBAAA1L,KAAAqC,MAAAqJ,kBAAAhD,KAAA7E,OACA7D,KAAAqC,MAAAqJ,kBAAAhD,KAAA7E;;cAIA7D,KAAAqC,MAAAsJ,gBAAA3L,KAAAqC,MAAAsJ,gBAAArC,OAAAtJ,KAAAqC,MAAAsJ,kBACA3L,KAAAqC,MAAAsJ,eAAArC;WAIA5J,OAAAD,UAAA2C;;;;;;IJoJM,SAAU1C,QAAQD;QK/uBxB,SAAAmM,SAAAvJ,OAAAwJ,UAAAC;YACA,IAAA/L,GAAA4H,KACAoE,OAAA;YACA,KAAAhM,IAAA,GAAA4H,MAAA,IAAAmE,OAAA9G,SAAA,GAAAjF,IAAA4H,KAAA5H,KAAA,GACAgM,QAAA,QAAAhM,IAAA,SAAAA,IAAA;YAEA,IAAAiM,eAAAH,SAAAhI,GAAAgI,SAAAhG;YACA,KAAA9F,IAAA,GAAA4H,MAAAmE,OAAA9G,QAAAjF,IAAA4H,KAAA5H,KACAiM,WAAA3G,KAAAyG,OAAA/L,GAAA8D,IACAmI,WAAA3G,KAAAyG,OAAA/L,GAAA8F;YAEA,IAAAvD,SAAAD,MAAAG,MAAAuJ,WAAAC;YACA1J,OAAAqB,KAAA,UAAAtB,MAAApB,QAAA,mBACAqB,OAAAqB,KAAA,gBAAAtB,MAAApB,QAAA;YAEA,IAAA+C,OAAA3B,MAAApB,QAAA+C,MACAC,QAAA5B,MAAApB,QAAA,gBACAiD,QAAA7B,MAAApB,QAAA;YAMA,OAJA+C,QAAA1B,OAAAqB;gBAAAK;gBACAC,SAAA3B,OAAAqB;gBAAAQ,eAAAF;gBACAC,SAAA5B,OAAAqB;gBAAAS,eAAAF;gBAEA5B;;QAGA,SAAA0D,SAAA3D,OAAA4J,MAAAC,IAAA3I;YACA,IAAAxD,GAAA4H;YAEA,qBAAAnG,OAAAE,UAAAyK,SAAA3L,KAAA0L,QACAA;YAGA,IAAAH,OAAA;YACA,KAAAhM,IAAA,GAAA4H,MAAA,IAAAuE,GAAAlH,SAAA,GAAAjF,IAAA4H,KAAA5H,KAAA,GACAgM,QAAA,QAAAhM,IAAA,SAAAA,IAAA;YAEA,IAAAiM,eAAAC,KAAApI,GAAAoI,KAAApG;YACA,KAAA9F,IAAA,GAAA4H,MAAAuE,GAAAlH,QAAAjF,IAAA4H,KAAA5H,KACAiM,WAAA3G,KAAA6G,GAAAnM,GAAA8D,IACAmI,WAAA3G,KAAA6G,GAAAnM,GAAA8F;YAGA,IAAAwC,OAAAhG,MAAAG,MAAAuJ,WAAAC;YACA3D,KAAA1E;gBACA4B,QAAAlD,MAAApB,QAAA;gBACAuE,gBAAAnD,MAAApB,QAAA;gBACAmL,aAAA/J,MAAApB,QAAA;;YAGA,IAAA+C,OAAA3B,MAAApB,QAAA+C,MACAC,QAAA5B,MAAApB,QAAA,gBACAiD,QAAA7B,MAAApB,QAAA;YAMA,IAJA+C,QAAAqE,KAAA1E;gBAAAK;gBACAC,SAAAoE,KAAA1E;gBAAAQ,eAAAF;gBACAC,SAAAmE,KAAA1E;gBAAAS,eAAAF;gBAEAX,MAAA;gBAEA,IAAA8I,cAAA,GAEAC,WAAAjK,MAAAG,MAAAe,KAAA,MAAAA,OACAgJ,aAAA,SAEAC,gBAAA,GACAC,UAAAP,GAAA;gBAEAD,KAAApG,MAAA4G,QAAA5G,MACA2G,gBAAA;gBAGA,IAAA3I,IAAA,GACAgC,IAAA;gBAEAwG,cAEAxI,IADAoI,KAAApI,IAAA4I,QAAA5I,IACAoI,KAAApI,KAAAoI,KAAApI,IAAA4I,QAAA5I,KAAA,IAEA4I,QAAA5I,KAAA4I,QAAA5I,IAAAoI,KAAApI,KAAA;gBAIAgC,IADAoG,KAAApG,IAAA4G,QAAA5G,IACAoG,KAAApG,KAAAoG,KAAApG,IAAA4G,QAAA5G,KAAA,IAEA4G,QAAA5G,KAAA4G,QAAA5G,IAAAoG,KAAApG,KAAA;gBAGA2G,gBACA3I,KAAAyI,SAAApH,UAAAC,QAAA,GACAU,KAAAxD,MAAApB,QAAA,mBAEA4C,KAAAxB,MAAApB,QAAA;gBACA4E,KAAAyG,SAAApH,UAAAO,SAAA,OAGA5B,IAAAoI,KAAApI,GACAgC,IAAAoG,KAAApG,GAEA2G,gBACAP,KAAApI,IAAA4I,QAAA5I,KACAA,KAAAxB,MAAApB,QAAA;gBACAsL,aAAA,SAEA1I,KAAAxB,MAAApB,QAAA,oBAEA4E,KAAAxD,MAAApB,QAAA,mBAEA4C,KAAAxB,MAAApB,QAAA;gBACA4E,KAAAxD,MAAApB,QAAA,gBACAgL,KAAApG,IAAA4G,QAAA5G,MACAA,KAAA,IAAAxD,MAAApB,QAAA;gBAKAqL,SAAA3I;oBACAC,eAAA2I;oBACAxI,aAAA1B,MAAApB,QAAA;oBACA6C,MAAAzB,MAAApB,QAAA;oBACA4C;oBACAgC;oBAGA7B,QAAAsI,SAAA3I;oBAAAK;oBACAC,SAAAqI,SAAA3I;oBAAAQ,eAAAF;oBACAC,SAAAoI,SAAA3I;oBAAAS,eAAAF;;;YAGA,OAAAmE;;QAGA,SAAApC,sBAAAyG,aAAAC,aAAAC,WAAAC,WAAAC,aAAAC,aAAAC,WAAAC;;YAEA,IAAAC,aAAApN,GAAAqN,GAAAC,YAAAC,YAAAC;gBACAzJ,GAAA;gBACAgC,GAAA;gBACAyF,UAAA;gBACAC,UAAA;;;;;;;;;;YAGA,OADA2B,eAAAD,YAAAF,gBAAAH,YAAAF,gBAAAM,YAAAF,gBAAAD,YAAAF;YACA,MAAAO,cACAI,UAEAxN,IAAA6M,cAAAI,aACAI,IAAAT,cAAAI;YACAM,cAAAJ,YAAAF,eAAAhN,KAAAmN,YAAAF,eAAAI,GACAE,cAAAT,YAAAF,eAAA5M,KAAA+M,YAAAF,eAAAQ;YACArN,IAAAsN,aAAAF,aACAC,IAAAE,aAAAH,aAGAI,OAAAzJ,IAAA6I,cAAA5M,KAAA8M,YAAAF;YACAY,OAAAzH,IAAA8G,cAAA7M,KAAA+M,YAAAF,cAOA7M,IAAA,KAAAA,IAAA,MACAwN,OAAAhC,WAAA;YAGA6B,IAAA,KAAAA,IAAA,MACAG,OAAA/B,WAAA,IAGA+B;;QAGA5N,OAAAD;YACAmM;YACA5F;YACAC;;;;;;;IL0vBM,SAAUvG,QAAQD,SAASU;QM/5BjC,SAAAS,MAAA2M;YAgJA,SAAAC,SAAAC;gBACA,IAAAC,aAAAD,EAAArF,QAAA,UACAuF,WAAAF,EAAArF,QAAA;gBACA,OAAAsF,cAAA,KAAAC,YAAA,IACAF,EAAArI,UAAAsI,YAAAC,YAEA;;YAGA,SAAAC,aAAAH;gBACA,IAAAC,aAAAD,EAAArF,QAAA,UACAuF,WAAAF,EAAArF,QAAA;gBACA,OAAAsF,cAAA,KAAAC,YAAA,IACAF,EAAArI,UAAAsI,YAAAC,YAEA;;YAGA,SAAAE,UAAAJ;gBACA,IAAAC,aAAAD,EAAArF,QAAA,UACAuF,WAAAF,EAAArF,QAAA;gBACA,OAAAsF,cAAA,KAAAC,YAAA,IACAtL,MAAAiE,QAAAmH,EAAArI,UAAA,GAAAsI,aAAA,MAEArL,MAAAiE,QAAAmH;;YAGA,SAAAK,YAAAL;gBACA,IAAApK,OAAA,QACAqK,aAAAD,EAAArF,QAAA,UACAuF,WAAAF,EAAArF,QAAA;gBASA,OARAsF,cAAA,KAAAC,YAAA,MACAtK,OAAA0K,SAAA3I,UAAAsI,YAAAC;gBACAtK,KAAA+E,QAAA,YACA,UAAA/E,QAAA,SAAAA,SACAA,OAAA,WAAAA;gBAIAA;;YAGA,SAAA2K,cAAAP;gBACA,IAAAC,aAAAD,EAAArF,QAAA,UAAAuF,WAAAF,EAAArF,QAAA,MACA6F,MAAAR,EAAArI,UAAAsI,YAAAC;gBACAM,IAAA7F,QAAA,aAAA6F,UAAA7I,UAAA,GAAA6I,IAAA7F,QAAA;gBACA,IAAA8F,YAAAD,IAAApJ,MAAA;gBACA,IAAAqJ,UAAAlJ,SAAA,GACA,OAAA0I,cAAA,KAAAC,YAAA,IAAAO,UAAA;;YA/LAX,iBAAA,IACAA,cAAAY;YAsHA,SApHA9L;gBACAiE;gBACA8H,OAAA;gBACAC,SAAA,SAAAC,WAAArN;oBAWA,SAAAsN,iBAAAd;wBACA,IAAAe,YAAAf,EAAA3K,MACA,OAAA0L,YAAAf,EAAA3K;wBAGA,QAAA2K,EAAA9K;0BACA;4BACA6L,YAAAf,EAAA3K,OAAA,IAAA2L,MAAAC,SAAAjB;4BACA;;0BACA;4BACAe,YAAAf,EAAA3K,OAAA,IAAA6L,IAAAD,SAAAjB;4BACA;;0BACA;4BACAe,YAAAf,EAAA3K,OAAA,IAAA8L,UAAAF,SAAAjB;4BACA;;0BACA;4BACAe,YAAAf,EAAA3K,OAAA,IAAA+L,YAAAH,SAAAjB;4BACA;;0BACA;4BACAe,YAAAf,EAAA3K,OAAA,IAAAgM,WAAAJ,SAAAjB;4BACA;;0BACA;4BACAe,YAAAf,EAAA3K,OAAA,IAAAiM,UAAAL,SAAAjB;4BACA;;0BACA;4BACAe,YAAAf,EAAA3K,OAAA,IAAAkM,SAAAN,SAAAjB;4BACA;;0BACA;4BACA,WAAAwB,MAAA;;wBAGA,OAAAT,YAAAf,EAAA3K;;oBAzCA,IAAAsE,OAAApH;oBAEAA,KAAA0O,WACA1O,KAAA0O,QAAAQ;oBAGA,IAAAR,UAAA,IAAA7N,UAAAyN,WAAArN;oBACAjB,KAAA0O;oBACA,IAAAF;qBAoCA,SAAAW,eAAA1B,GAAA2B,UAAAC;wBACA,IAAAC,WAAAf,iBAAAd;wBA2BA,OAzBArG,KAAAgH,UAAAX,IACAiB,QAAAa,UAAAD,YACAF,YAAAC,SAAAD,SAAAI,WACAJ,oBAAA,aACAC,KAAAI,QAAAhC,KACA2B,SAAAK,IAAAH;wBAEAD,KAAAK,OAAAjC,KACA2B,SAAAM,GAAAJ,aAEAF,oBAAA,YACAC,KAAAM,UAAAlC,KACA2B,SAAAO,MAAAL;wBAEAD,KAAAO,UAAAnC,KACA2B,SAAAQ,MAAAN,WAEAD,KAAAQ,UAAApC,KACA2B,SAAAS,MAAAP,aAGAF,SAAAU,KAAAR;wBAIAA,SAAAE,SACAF,YAGAA,oBAAA,aACA7B,EAAAgC,OACAN,eAAA1B,EAAAgC,KAAAH,UAAA7B;wBAEAA,EAAAiC,MACAP,eAAA1B,EAAAiC,IAAAJ,UAAA7B,MAEA6B,oBAAA,YACA7B,EAAAkC,SACAR,eAAA1B,EAAAkC,OAAAL,UAAA7B;wBAEAA,EAAAmC,SACAT,eAAA1B,EAAAmC,OAAAN,UAAA7B,IAEAA,EAAAoC,SACAV,eAAA1B,EAAAoC,OAAAP,UAAA7B,MAEAA,EAAApK,QACA8L,eAAA1B,EAAApK,MAAAiM,UAAA7B;wBAGA6B;sBACAtP,KAAAoO,QAEAM,QAAAvH;;gBAEA+H,OAAA;oBACAlP,KAAA0O,QAAAQ;;gBAEAjO,SAAA;oBACA,OAAAjB,KAAA0O,QAAAzN;;eAIAkJ,YACA4F,YAAA,GACAC,KAAA,GAAAC,QAAA1C,MAAAvI,QAAAgL,KAAAC,OAAAD,MACA,aAAAzC,MAAAyC,OAAA,SAAAzC,MAAAyC,KAAA;gBACA,IAAAE,QAAA3C,MAAAnI,UAAA2K,WAAAC;gBACAD,YAAAC,KAAA,GACA7F,MAAA9E,KAAA6K,MAAAC,QAAA;;YAIAJ,YAAAxC,MAAAvI,UACAmF,MAAA9E,KAAAkI,MAAA6C,OAAAL;YAGA,SAAA9F,IAAA,GAAAtC,MAAAwC,MAAAnF,QAAAiF,IAAAtC,OAAA;gBACA,IAAA0I,cAAAlG,MAAAF;gBAEAoG,YAAAjI,QAAA,aAAAiI,YAAAjI,QAAA,aAAAiI,YAAAjI,QAAA,aACA+B,MAAAF,IAAA,aAAAoG;gBACAlG,MAAAsB,OAAAxB,GAAA,IACAtC,SAEAsC;;YAuDA,MAAAE,MAAAnF,SAAA;gBACA,IAAAqD,OAAA8B,MAAAsB,OAAA,SAAA0C;gBAEA,IAAA9F,KAAAD,QAAA;;oBAEA,IAAAkI,QAAAjI,KAAAxD,MAAA,OACAvC;wBACAQ,KAAAwN,MAAA,GAAAH,QAAA;wBACAxN,YAAA2N,MAAA;wBACA/M,MAAA;wBACAc,MAAA;wBACAK,QAAA;wBACA9B,WAAA;wBACA0B,UAAA;wBACAzB;wBACAM;uBAIAA,SAAAmN,MAAA,GAAAC,MAAA;oBACA,IAAApN,iBAAA6B,SAAA,GAEA,SADAwL,UAAArN,OAAA,GAAA0B,MAAA,MACA9E,IAAA,GAAAA,IAAAyQ,QAAAxL,QAAAjF,KAAA;wBACA,IAAA0Q,QAAAD,QAAAzQ,GAAA8E,MAAA;wBACA,KAAA4L,MAAAzL,WACA1C,OAAAa,OAAAsN,MAAA,MAAAA,MAAA;;oBAKA,IAAAC;;oBA+BA,IA7BApO,OAAAK,WAAAyF,QAAA,eACAsI,MAAApO,OAAAK,WAAAkC,MAAA;oBACAvC,OAAAK,aAAA+N,IAAAlJ,SACAlF,OAAAiB,OAAAmN,IAAAC,KAAA,QAGArO,OAAAiB,QAAAjB,OAAAiB,KAAA6E,QAAA,cACAsI,MAAApO,OAAAiB,KAAAsB,MAAA;oBACAvC,OAAAiB,OAAAmN,IAAAlJ,SACAlF,OAAAgC,WAAAoM,IAAAC,KAAA,SACArO,OAAAK,WAAAyF,QAAA,cACAsI,MAAApO,OAAAK,WAAAkC,MAAA;oBACAvC,OAAAK,aAAA+N,IAAAlJ,SACAlF,OAAAgC,WAAAoM,IAAAC,KAAA,SACArO,OAAAiB,QAAAjB,OAAAiB,KAAA6E,QAAA,cACAsI,MAAApO,OAAAiB,KAAAsB,MAAA;oBACAvC,OAAAiB,OAAAmN,IAAAlJ,SACAlF,OAAA+B,OAAAqM,IAAAC,KAAA,SACArO,OAAAK,WAAAyF,QAAA,eACAsI,MAAApO,OAAAK,WAAAkC,MAAA;oBACAvC,OAAAK,aAAA+N,IAAAlJ,SACAlF,OAAA+B,OAAAqM,IAAAC,KAAA,QAGArO,OAAAK,WAAAyF,QAAA,eACA9F,OAAAK,aAAAL,OAAAK,WAAAkC,MAAA;oBAIAvC,OAAA+B,MAAA;wBACA,IAAAqJ,aAAApL,OAAA+B,KAAA+D,QAAA,UACAuF,WAAArL,OAAA+B,KAAA+D,QAAA;wBACAsF,cAAA,KAAAC,YAAA,MACArL,OAAAoC,SAAApC,OAAA+B,KAAAe,UAAAsI,YAAAC;wBACArL,OAAA+B,OAAA/B,OAAA+B,KAAAe,UAAA,GAAAsI,aAAA;;;;oBAMA,IAAApL,OAAAiB,QACAjB,OAAAiB,KAAA6E,QAAA;wBACA,IAAAwI,cAAAtO,OAAAiB,KAAAsB,MAAA;wBACAvC,OAAAM,YAAAgO,YAAAC,MAAA1C,QACA7L,OAAAiB,OAAAqN,YAAAD,KAAA;;;oBAKAtO,MAAAiE,QAAAhE,OAAAQ,OAAAR;uBAEA,IAAA+F,KAAAD,QAAA;oBACA,IAAA0I,MAAA9C,cAAA3F;oBACAyI,QACAzI,YAAA8H,QAAA,MAAAW,KAAA;oBAIA,SADAC,cAAA1I,KAAAxD,MAAA,OACAmM,KAAA,GAAAC,OAAAF,YAAA/L,QAAAgM,KAAAC,MAAAD,MAAA;wBACA,IAAAjD,WAAAgD,YAAAC,KACAE,UAAAtD,aAAAG;wBAEA,WAAAmD,WAAA,YAAAA;wBAEAnD,oBAAAoC,QAAA,gBACApC,oBAAAoC,QAAA;wBAGA,IAAA9M,OAAAyK,YAAAC,WACAoD,WAAAtD,UAAAE,WAEAqD,YAAA;wBACA,IAAA/N,KAAA+E,QAAA;4BACA,IAAAiJ,UAAAhO,KAAAwB,MAAA;4BACAxB,OAAAgO,QAAA,IACAD,YAAAC,QAAA,GAAAlD;;wBA0BA,IAvBA2C,QACA,gBAAAK,SAAAxO,aACA,UAAAU,QAAA,WAAAA,OACA8N,SAAAG,iBAAAR,MAEAK,SAAAI,gBAAAT,MAEA,eAAAK,SAAAxO,eACA,YAAAU,OACA8N,SAAAK,mBAAAV,MACA,YAAAzN,OACA8N,SAAAM,mBAAAX,MACA,YAAAzN,SACA8N,SAAAO,mBAAAZ;wBAGAA,MAAA,OAGAzO,MAAA+L,UACA/L,MAAA+L,QAAA+C,WAGAH,KAAA,IAAAC,MAAA;4BACA,IAAAU,WAAAZ,YAAAC,KAAA;4BACAG,SAAA9N,QAAAwK,UAAA8D,WACAR,SAAA,eAAA9N,QAAA+N;4BACAA,YAAA;;;uBAGA,IAAA/I,KAAAD,QAAA,YAIA,SADAwJ,mBAAAvJ,KAAAxD,MAAA,OACAgN,MAAA,GAAAC,QAAAF,iBAAA5M,QAAA6M,MAAAC,OAAAD,OACA,IAAAA,MAAA,MAAAC,OAAA;oBACA,IAAAC,UAAAlE,UAAA+D,iBAAAC,OACAG,aAAAnE,UAAA+D,iBAAAC,MAAA;oBAEAE,QAAA,UAAAC,WAAAlP,OAAAmP,KAAArR,MAAA4M,SAAAoE,iBAAAC,MAAA;;;YAMA,OAAAxP;;QAvWA,IAAAxB,YAAAV,6CAAA,IACAsO,QAAAtO,oDAAA,KACAwO,MAAAxO,kDAAA,KACAyO,YAAAzO,wDAAA,KACA0O,cAAA1O,0DAAA,KACA2O,aAAA3O,yDAAA,KACA4O,YAAA5O,wDAAA,IACA6O,WAAA7O,uDAAA;QAmWAT,OAAAD,UAAAmB;;;;;;INk7BM,SAAUlB,QAAQD,SAASU;QOvxCjC,SAAA4O,UAAA1M,OAAApB;YACAA,yBACAmB,OAAA5B,KAAAR,MAAAqC,OAAApB,UACAjB,KAAAsR,iBAAArQ,QAAAqQ;YACAtR,KAAAuR,gBAAAtQ,QAAAsQ,eACAvR,KAAAkS,aAAAlS,KAAA0D,QAAA;YACA1D,KAAAmS,gBAAAlR,QAAAmR,eACApS,KAAAqS,eAAApR,QAAAqR;YACAtS,KAAAqS,gBAAA,YAAArS,KAAAmS,gBAEAnS,KAAAmS,iBAAA,aAAAnS,KAAAqS,iBACArS,KAAAmS,gBAAA,WAFAnS,KAAAqS,eAAA;YAIArS,KAAAmS,gBAAAnS,KAAAmS,iBAAA,UACAnS,KAAAqS,eAAArS,KAAAqS,gBAAA;YAEArS,KAAAuD,KAAAI;gBACAE,GAAA,IAAA7D,KAAAkS;;YAGA,IAAA/M,QAAAnF,KAAAuD,KAAA2B,UAAAC,QAAA,IAAAnF,KAAAkS;YACA/M,iBAAA;YACA,IAAAM,SAAAzF,KAAAuD,KAAA2B,UAAAO,SAAA,IAAAzF,KAAAkS;YACAzM,mBAAA,GACAA,SAAAoC,KAAA2B,IAAA,KAAArE,OAAAM;YACA,IAAA8M,SAAApN,QAAA,GACAqN,SAAA/M,SAAA;YAEAzF,KAAAuD,KAAAI;gBACAE,GAAA0O,SAAAvS,KAAAkS,aAAA;;YAGA,IAAA9D;gBAAAvK,GAAA0O;gBAAA1M,GAAA2M;eACA1G;gBACAjI,GAAA0O,SAAApN,QAAA;gBAAAU,GAAA2M,SAAA/M,SAAA;;gBACA5B,GAAA0O,SAAApN,QAAA,IAAAA,QAAA;gBAAAU,GAAA2M,SAAA/M,SAAA,IAAAA,SAAA;;gBACA5B,GAAA0O,SAAApN,QAAA,IAAAA;gBAAAU,GAAA2M,SAAA/M,SAAA;;gBACA5B,GAAA0O,SAAApN,QAAA,IAAAA,QAAA;gBAAAU,GAAA2M,SAAA/M,SAAA,IAAAA,SAAA;;gBACA5B,GAAA0O,SAAApN,QAAA;gBAAAU,GAAA2M,SAAA/M,SAAA;iBAGAnD,SAAAsJ,SAAAvJ,OAAA+L,OAAAtC;YAEAxJ,OAAAqB;gBACA4B,QAAAvF,KAAA0D,QAAA;gBACA8B,gBAAAxF,KAAA0D,QAAA;gBACAI,MAAA9D,KAAA0D,QAAA;gBAEAzC,QAAAoD,QAAA/B,OAAAqB,KAAA,QAAA1C,QAAAoD,OACApD,QAAAyD,UAAApC,OAAAqB,KAAA,UAAA1C,QAAAyD;YACAzD,QAAA6B,QAAAR,OAAAkB,KAAAlD,KAAAW,QAAA6B,MACAR,OAAAkB,KAAAC,aAAA,SAAAzD,KAAA0D,QAAA;YAEA1D,KAAAuD,KAAAI;gBACAkC,GAAAvD,OAAA4C,UAAAO,SAAA;gBAGAzF,KAAAuC,MAAA8C,KAAA/C,SACAA,OAAAsD,aAAA5F,KAAAuD,OACAvD,KAAAsC;YAEAtC,KAAA8F;;QAlEA,IAAA1D,SAAAjC,8CAAA,IACAgC,WAAAhC,+CAAA,GAAAgC,UACA4D,UAAA5F,iDAAA,IACAyL,WAAA7F,QAAA6F;QAiEAzJ,SAAA4M,WAAA3M,SAEA2M,UAAArN,UAAAyF,SAAA;YACA,IAAAC,OAAApH;YACAA,KAAAmS,kBACAnS,UAAAmS,gBAAA,aAAAnS,KAAAyS;YAGAzS,KAAAqS,iBACArS,UAAAqS,eAAA,aAAArS,KAAA0S;YAGA,IAAArL,aAAArH,KAAA0D,QAAA;YAEA,IAAA1D,KAAA2S,eAAA;gBACA,IAAA3K,cAAAhI,KAAAgH;gBAEAhH,KAAA2S,cAAApL,iBACAvH,KAAA2S,cAAA9L,OAAA7G,KAAA0G,SAAA1G,KAAAyF,SAAA4B;gBACArH,KAAA2S,cAAA/L,KAAAoB,YAAAnE,IAAA7D,KAAA2S,cAAAxN,QAAA,IACAnF,KAAA2S,cAAApL,gBAAA;gBAEAvH,KAAA2S,cAAAxL;;YAIA,IAAAnH,KAAA4S,cAAA;gBACA,IAAAtL,aAAAtH,KAAAkH;gBAEAlH,KAAA4S,aAAArL,iBAEAvH,KAAA4S,aAAA9L,KAAAQ,WAAAzB,IAAA7F,KAAA4S,aAAAnN,SAAA;gBACAzF,KAAA4S,aAAAjM,OAAA3G,KAAAuC,MAAA2C,UAAArB,IAAA7D,KAAAmF,QAAAkC,aAEA,SAAAG;oBAGA,SADAC,MADAC,kBAAA,GAEA3H,IAAA,GAAA4H,MAAAP,KAAA/E,MAAAiE,QAAAtB,QAAAjF,IAAA4H,KAAA5H,KAGA,IAFA0H,OAAAL,KAAA/E,MAAAiE,QAAAvG;qBAEAqH,KAAAjE,OAAA,0BAAAiE,KAAAjE,OAAA;wBACA,IAAAyE,OAAAC,KAAAC,IAAAL,KAAAjB,YAAA3C,IAAAuD,KAAAwL,aAAApM,YAAA3C;wBACA,IAAA4D,KAAAjB,YAAAX,IAAAuB,KAAAwL,aAAApM,YAAAX,KAAA+B,QAAAR,KAAAwL,aAAAzN,QAAA;4BACAuC,kBAAA;4BACA;;;oBAKA,IAAAA,gBAAA;wBACA,cAAAN,KAAAwL,aAAAjQ,YAAA;wBACAyE,KAAAwL,aAAAhM,KAAAa,KAAAhB,SAAAgB,KAAAtC,QAAAkC,aACAG;;qBAIAxH,KAAA4S,aAAArL,gBAAA,GAEAvH,KAAA4S,aAAAzL;;YAIA,IAAAnH,KAAA6S,aAAA;gBACA,IAAA9K,YAAA/H,KAAAiH;gBAEAjH,KAAA6S,YAAAtL,iBACAvH,KAAA6S,YAAA/L,KAAAiB,UAAAlC,IAAA7F,KAAA6S,YAAApN,SAAA;gBACAzF,KAAA6S,YAAAlM,SAAA3G,KAAAuC,MAAA2C,UAAArB,IAAA7D,KAAAmF,QAAAkC,cAEA,SAAAG;oBAGA,SADAC,MADAC,kBAAA,GAEA3H,IAAA,GAAA4H,MAAAP,KAAA/E,MAAAiE,QAAAtB,QAAAjF,IAAA4H,KAAA5H,KAGA,IAFA0H,OAAAL,KAAA/E,MAAAiE,QAAAvG;qBAEAqH,KAAAjE,OAAA,0BAAAiE,KAAAjE,OAAA;wBACA,IAAAyE,OAAAC,KAAAC,IAAAL,KAAAjB,YAAA3C,IAAAuD,KAAAyL,YAAArM,YAAA3C;wBACA,IAAA4D,KAAAjB,YAAAX,IAAAuB,KAAAyL,YAAArM,YAAAX,KAAA+B,QAAAR,KAAAyL,YAAA1N,QAAA;4BACAuC,kBAAA;4BACA;;;oBAKA,IAAAA,gBAAA;wBACA,cAAAN,KAAAyL,YAAAlQ,YAAA;wBACAyE,KAAAyL,YAAAjM,KAAAa,KAAAhB,SAAAgB,KAAAtC,QAAAkC,aACAG;;qBAIAxH,KAAA6S,YAAAtL,gBAAA,GAEAvH,KAAA6S,YAAA1L;;WAKA4H,UAAArN,UAAAuG,cAAA;YACAjI,KAAAyS,cACAzS,KAAAkI,WAAAlI,KAAAyS,YAAAzS,KAAAsR,iBAAAtR,KAAAsR,iBAAAtR,KAAA0D,QAAA,aAAA1D,KAAAmS;YAGAnS,KAAA0S,aACA1S,KAAAkI,WAAAlI,KAAA0S,WAAA1S,KAAAuR,gBAAAvR,KAAAuR,gBAAAvR,KAAA0D,QAAA,YAAA1D,KAAAqS;WAIA3S,OAAAD,UAAAsP;;;;;;IPsyCM,SAAUrP,QAAQD,SAASU;QQn9CjC,SAAA6O,SAAA3M,OAAApB;YACA,IAAAqB,SAAAD,MAAAG,MAAAsQ,KAAA;YACA7R,yBACAmB,OAAA5B,KAAAR,MAAAqC,OAAApB,SAAAqB,SACAtC,KAAAwR,mBAAAvQ,QAAAuQ,oBAAA;YACAxR,KAAAyR,mBAAAxQ,QAAAwQ,oBAAA,IACAzR,KAAA0R,mBAAAzQ,QAAAyQ,oBAAA;YACA1R,KAAAkS,aAAAlS,KAAA0D,QAAA,gBACA1D,KAAA+S,kBAAA;YACA/S,KAAAgT,kBAAA,SACAhT,KAAAiT,kBAAA,OACAjT,KAAAmD,SAAAlC,QAAAkC;YACA,YAAAlC,QAAAiS,mBAAAjS,gBAAAiS,mBAAAjS,QAAAoC,SACApC,gBAAAiS,kBAAAjS,QAAAoC;YAEA,YAAApC,QAAAiS,mBAAAjS,gBAAAiS,mBAAAjS,QAAAoC,SACApC,gBAAAiS,kBAAAjS,QAAAoC;YAEA,YAAApC,QAAAiS,mBAAAjS,gBAAAiS,mBAAAjS,QAAAoC,SACApC,gBAAAiS,kBAAAjS,QAAAoC;YAGApC,QAAA0O,SAAA1O,QAAAkS,mBAAAlS,QAAA2O,UAAA3O,QAAAmS,mBAAAnS,QAAA4O,UAAA5O,QAAAoS,kBACA,YAAApS,QAAAkS,mBACAnT,KAAAgT,kBAAA;YACAhT,KAAA+S,kBAAA,SACA/S,KAAAiT,kBAAA,SACA,UAAAhS,QAAAkS,mBACAnT,KAAAgT,kBAAA;YACAhT,KAAA+S,kBAAA,OACA/S,KAAAiT,kBAAA,YACA,WAAAhS,QAAAkS,mBACAnT,KAAAgT,kBAAA;YACAhT,KAAA+S,kBAAA,QACA/S,KAAAiT,kBAAA,aAEAjT,KAAAgT,kBAAA;YACAhT,KAAA+S,kBAAA,UACA/S,KAAAiT,kBAAA,SAEAhS,QAAA0O,UAAA1O,QAAAkS,mBAAAlS,QAAA2O,SAAA3O,QAAAmS,mBAAAnS,QAAA4O,UAAA5O,QAAAoS,kBACA,YAAApS,QAAAmS,mBACApT,KAAA+S,kBAAA;YACA/S,KAAAgT,kBAAA,SACAhT,KAAAiT,kBAAA,SACA,WAAAhS,QAAAmS,mBACApT,KAAA+S,kBAAA;YACA/S,KAAAgT,kBAAA,QACAhT,KAAAiT,kBAAA,YAEAjT,KAAA+S,kBAAA;YACA/S,KAAAgT,kBAAA,UACAhT,KAAAiT,kBAAA,SAEAhS,QAAA0O,UAAA1O,QAAAkS,mBAAAlS,QAAA2O,UAAA3O,QAAAmS,mBAAAnS,QAAA4O,SAAA5O,QAAAoS,kBACA,YAAApS,QAAAmS,mBACApT,KAAA+S,kBAAA;YACA/S,KAAAgT,kBAAA,OACAhT,KAAAiT,kBAAA,WACA,WAAAhS,QAAAmS,mBACApT,KAAA+S,kBAAA;YACA/S,KAAAgT,kBAAA,SACAhT,KAAAiT,kBAAA,WAEAjT,KAAA+S,kBAAA;YACA/S,KAAAgT,kBAAA,UACAhT,KAAAiT,kBAAA,UAGAjT,KAAA+S,kBAAA9R,QAAAkS;YACAnT,KAAAgT,kBAAA/R,QAAAmS,iBACApT,KAAAiT,kBAAAhS,QAAAoS;YAGArT,KAAA+S,kBAAA/S,KAAA+S,mBAAA,UACA/S,KAAAgT,kBAAAhT,KAAAgT,mBAAA;YACAhT,KAAAiT,kBAAAjT,KAAAiT,mBAAA,OAEAjT,KAAA8F;;QAjFA,IAAA1D,SAAAjC,8CAAA,IACAgC,WAAAhC,+CAAA,GAAAgC;QAkFAA,SAAA6M,UAAA5M,SAEA4M,SAAAtN,UAAAyF,SAAA;YACAnH,KAAA+S,oBACA/S,UAAA+S,kBAAA,aAAA/S,KAAAsT;YAGAtT,KAAAgT,oBACAhT,UAAAgT,kBAAA,aAAAhT,KAAAuT;YAGAvT,KAAAiT,oBACAjT,UAAAiT,kBAAA,aAAAjT,KAAAwT;YAGA,IAAAnM,aAAArH,KAAA0D,QAAA;YAEA,IAAA1D,KAAA2S,eAAA;gBACA,IAAA3K,cAAAhI,KAAAgH;gBAEAhH,KAAA2S,cAAApL,iBACAvH,KAAA2S,cAAA9L,OAAA7G,KAAA0G,SAAA1G,KAAAyF,SAAA4B;gBACArH,KAAA2S,cAAA/L,KAAAoB,YAAAnE,IAAA7D,KAAA2S,cAAAxN,QAAA,IACAnF,KAAA2S,cAAApL,gBAAA;gBAEAvH,KAAA2S,cAAAxL;;YAIA,IAAAnH,KAAAyT,YAAA;gBACA,IAAAC,WAAA1T,KAAA+G;gBAEA/G,KAAAyT,WAAAlM,iBACAvH,KAAAyT,WAAA5M,OAAA7G,KAAA0G,SAAA1G,KAAAyT,WAAAhO,SAAA4B;gBACArH,KAAAyT,WAAA7M,KAAA8M,SAAA7P,IAAA7D,KAAAyT,WAAAtO,QACAnF,KAAAyT,WAAAlM,gBAAA;gBAEAvH,KAAAyT,WAAAtM;;YAIA,IAAAC,OAAApH;YAEA,IAAAA,KAAA6S,aAAA;gBACA,IAAA9K,YAAA/H,KAAAiH;gBAEAjH,KAAA6S,YAAAtL,iBACAvH,KAAA6S,YAAA/L,KAAAiB,UAAAlC,IAAA7F,KAAA6S,YAAApN,SAAA;gBACAzF,KAAA6S,YAAAlM,SAAA3G,KAAAuC,MAAA2C,UAAArB,IAAA7D,KAAAmF,QAAAkC,cACA,SAAAG;oBAGA,SADAC,MADAC,kBAAA,GAEA3H,IAAA,GAAA4H,MAAAP,KAAA/E,MAAAiE,QAAAtB,QAAAjF,IAAA4H,KAAA5H,KAGA,IAFA0H,OAAAL,KAAA/E,MAAAiE,QAAAvG;qBAEAqH,KAAAjE,OAAA,0BAAAiE,KAAAjE,OAAA;wBACA,IAAAyE,OAAAC,KAAAC,IAAAL,KAAAjB,YAAA3C,IAAAuD,KAAAyL,YAAArM,YAAA3C;wBACA,IAAA4D,KAAAjB,YAAAX,IAAAuB,KAAAyL,YAAArM,YAAAX,KAAA+B,QAAAR,KAAAyL,YAAA1N,QAAA;4BACAuC,kBAAA;4BACA;;;oBAKA,IAAAA,gBAAA;wBACA,cAAAN,KAAAyL,YAAAlQ,YAAA;wBACAyE,KAAAyL,YAAAjM,KAAAa,KAAAhB,SAAAgB,KAAAtC,QAAAkC,aACAG;;qBAIAxH,KAAA6S,YAAAtL,gBAAA,GAEAvH,KAAA6S,YAAA1L;;YAIA,IAAAnH,KAAA4S,cAAA;gBACA,IAAAtL,aAAAtH,KAAAkH;gBAEAlH,KAAA4S,aAAArL,iBACAvH,KAAA4S,aAAA9L,KAAAQ,WAAAzB,IAAA7F,KAAA4S,aAAAnN,SAAA;gBACAzF,KAAA4S,aAAAjM,OAAA3G,KAAAuC,MAAA2C,UAAArB,IAAA7D,KAAAmF,QAAAkC,aACA,SAAAG;oBAGA,SADAC,MADAC,kBAAA,GAEA3H,IAAA,GAAA4H,MAAAP,KAAA/E,MAAAiE,QAAAtB,QAAAjF,IAAA4H,KAAA5H,KAGA,IAFA0H,OAAAL,KAAA/E,MAAAiE,QAAAvG;qBAEAqH,KAAAjE,OAAA,0BAAAiE,KAAAjE,OAAA;wBACA,IAAAyE,OAAAC,KAAAC,IAAAL,KAAAjB,YAAA3C,IAAAuD,KAAAwL,aAAApM,YAAA3C;wBACA,IAAA4D,KAAAjB,YAAAX,IAAAuB,KAAAwL,aAAApM,YAAAX,KAAA+B,QAAAR,KAAAwL,aAAAzN,QAAA;4BACAuC,kBAAA;4BACA;;;oBAKA,IAAAA,gBAAA;wBACA,cAAAN,KAAAwL,aAAAjQ,YAAA;wBACAyE,KAAAwL,aAAAhM,KAAAa,KAAAhB,SAAAgB,KAAAtC,QAAAkC,aACAG;;qBAIAxH,KAAA4S,aAAArL,gBAAA,GAEAvH,KAAA4S,aAAAzL;;WAKA6H,SAAAtN,UAAAuG,cAAA;YACAjI,KAAAsT,gBACAtT,KAAAkI,WAAAlI,KAAAsT,cAAAtT,KAAAwR,kBAAAxR,KAAA+S;YAGA/S,KAAAuT,gBACAvT,KAAAkI,WAAAlI,KAAAuT,cAAAvT,KAAAyR,kBAAAzR,KAAAgT;YAGAhT,KAAAwT,gBACAxT,KAAAkI,WAAAlI,KAAAwT,cAAAxT,KAAA0R,kBAAA1R,KAAAiT;WAIAvT,OAAAD,UAAAuP;;;;;;IR+9CM,SAAUtP,QAAQD,SAASU;QS1qDjC,SAAAU,UAAAyN,WAAArN;YACAA,yBAEAjB,KAAAwC,QAAA,IAAAmR,QAAArF,YAEAtO,KAAAiB,UAAAiB,SAAAjB,SAAAC;YAEAlB,KAAAsG,cACAtG,KAAAmK,YACAnK,KAAAoO,QAAA;;QAfA,IAAAuF,UAAAxT,mCAAA,KACA+B,WAAA/B,+CAAA,GAAA+B,UACAhB,iBAAAf,gDAAA,IACA4O,YAAA5O,wDAAA,IACA6O,WAAA7O,uDAAA;QAcAU,UAAAa,UAAAkS,SAAA,SAAAtR;YACAtC,KAAAsG,QAAA8B,QAAA9F,YAAA,KACAtC,KAAAsG,QAAAjB,KAAA/C;YAGA,IAAAuR,YAAA7T;YA+CA,OA7CAsC,kBAAA,aACAA,OAAAmN,MAAA,SAAAuC;gBAKA,OAJA1P,OAAAmQ,aAAAT,YACA1P,OAAAoQ,cACApQ,OAAAkN,UAAA;gBAEAqE,UAAAD,OAAA5B;eAEA1P,OAAAoN,KAAA,SAAAsC;gBAKA,OAJA1P,OAAAoQ,YAAAV,YACA1P,OAAAmQ,eACAnQ,OAAAkN,UAAA;gBAEAqE,UAAAD,OAAA5B;iBAEA1P,kBAAA,YACAA,OAAAqN,QAAA,SAAAqC;gBAKA,OAJA1P,OAAAgR,eAAAtB,YACA1P,OAAAiR,iBACAjR,OAAAkN,UAAA;gBAEAqE,UAAAD,OAAA5B;eAEA1P,OAAAsN,QAAA,SAAAoC;gBAKA,OAJA1P,OAAAiR,eAAAvB,YACA1P,OAAAkR,iBACAlR,OAAAkN,UAAA;gBAEAqE,UAAAD,OAAA5B;eAEA1P,OAAAuN,QAAA,SAAAmC;gBAKA,OAJA1P,OAAAkR,eAAAxB,YACA1P,OAAAgR,iBACAhR,OAAAkN,UAAA;gBAEAqE,UAAAD,OAAA5B;iBAGA1P,OAAAwN,OAAA,SAAAkC;gBAGA,OAFA1P,OAAAe,OAAA2O,YACA1P,OAAAkN,UAAA,GACAqE,UAAAD,OAAA5B;eAIA1P;WAGAzB,UAAAa,UAAA6N,YAAA,SAAAjN;YAEA,OADAtC,KAAAoO,QAAA9L,QACAtC,KAAA4T,OAAAtR;WAGAzB,UAAAa,UAAAyF,SAAA;YACA,IAQA7E,QACA+F,MATA1D,WAAA,GACAmP,YAAA,GACA/T,IAAA,GACA4H,MAAA,GACA2B,OAAA,GACAyK,OAAA,GACAC,OAAA,GACAC,OAAA;YAIA,KAAAlU,IAAA,GAAA4H,MAAA3H,KAAAsG,QAAAtB,QAAAjF,IAAA4H,KAAA5H,KACAuC,SAAAtC,KAAAsG,QAAAvG,IACAuC,OAAA6C,QAAAR,aACAA,WAAArC,OAAA6C;YAEA7C,OAAAmD,SAAAqO,cACAA,YAAAxR,OAAAmD;YAIA,KAAA1F,IAAA,GAAA4H,MAAA3H,KAAAsG,QAAAtB,QAAAjF,IAAA4H,KAAA5H,KACAuC,SAAAtC,KAAAsG,QAAAvG,IACAuC,OAAAqE,OAAA3G,KAAAiB,QAAA4C,KAAAc,WAAArC,OAAA6C,SAAA,IAAAnF,KAAAiB,QAAA;YACAqB,OAAAuE,OAAA7G,KAAAiB,QAAA4E,KAAAiO,YAAAxR,OAAAmD,UAAA,IAAAzF,KAAAiB,QAAA;;;;;YASA,KANAjB,KAAAoO,MAAAjH,UAMApH,IAAA,GAAA4H,MAAA3H,KAAAsG,QAAAtB,QAAAjF,IAAA4H,KAAA5H,KACAuC,SAAAtC,KAAAsG,QAAAvG;YACAuC,OAAA2F;YAGAqB,OAAAtJ,KAAA2L;YAEA,IAAA9H,GACAgC;YAEA,KAAA9F,IAAA,GAAA4H,MAAA3H,KAAAsG,QAAAtB,QAAAjF,IAAA4H,KAAA5H,KAAA;gBACAuC,SAAAtC,KAAAsG,QAAAvG;gBACA,IAAAmU,QAAA5R,OAAAmE;gBACA5C,IAAAqQ,QAAA5R,OAAA6C,OACAU,IAAAvD,OAAAoE,SAAApE,OAAAmD,QACAyO,QAAAF,SACAA,OAAAE;gBAEArQ,IAAAyF,SACAA,OAAAzF,IAEAgC,IAAAkO,SACAA,OAAAlO;;YAIA,KAAA9F,IAAA,GAAA4H,MAAA3H,KAAAmK,MAAAnF,QAAAjF,IAAA4H,KAAA5H,KAAA;gBACAsI,OAAArI,KAAAmK,MAAApK,GAAAmF,WACArB,IAAAwE,KAAAxE,GACAgC,IAAAwC,KAAAxC;gBACA,IAAAsO,KAAA9L,KAAA8L,IACAC,KAAA/L,KAAA+L;gBACAvQ,IAAAmQ,SACAA,OAAAnQ,IAEAgC,IAAAoO,SACAA,OAAApO,IAEAsO,KAAA7K,SACAA,OAAA6K,KAEAC,KAAAL,SACAA,OAAAK;;YAIA,IAAAC,QAAArU,KAAAiB,QAAA,OACAqT,YAAAtU,KAAAiB,QAAA;YAEAjB,KAAA0L,kBAAAsI,gBAAAhU,KAAA0L,kBAEAsI,OAAA,MAAAA,QAAAM;YACAL,OAAA,MAAAA,QAAAK;YAEA,IAAAnP,QAAAmE,OAAAgL,YAAAN,MACAvO,SAAAsO,OAAAO,YAAAL;YAEAjU,KAAAwC,MAAA+R,QAAApP,QAAAkP,OAAA5O,SAAA4O,QACArU,KAAAwC,MAAAgS,WAAAR,MAAAC,MAAA9O,OAAAM,SAAA;WAGA5E,UAAAa,UAAAwN,QAAA;YACA,IAAAlP,KAAAwC,OAAA;gBACA,IAAAiS,WAAAzU,KAAAwC,MAAAkS;gBACAD,SAAAE,cAAAF,SAAAE,WAAAC,YAAAH;;WAIA/U,OAAAD,UAAAoB;;;;;;ITyrDM,SAAUnB,QAAQD;;QU52DxBC,OAAAD;YACAoE,GAAA;YACAgC,GAAA;;YAEAgP,cAAA;YACAC,eAAA;YACAC,eAAA;YACAhR,aAAA;YACAiR,cAAA;;;;YAIAC,cAAA;YACAC,iBAAA;YACApR,MAAA;YACAqR,YAAA;YACAC,WAAA;YACAhJ,aAAA;YACAiJ,OAAA;YACAhB,OAAA;YACA/N;gBACA8H;gBACAkH;gBACAC;gBACAC;gBACAC;gBACAC;gBACAC;;;;;;;;IV83DM,SAAUjW,QAAQD;;QWz5DxBmW,MAAAlU,UAAA0G,YACAwN,MAAAlU,UAAA0G,UAAA,SAAAyN;YACA;YACA,aAAA7V,MACA,UAAA8V;YAEA,IAAAC,IAAAvU,OAAAxB,OACA2H,MAAAoO,EAAA/Q,WAAA;YACA,UAAA2C,KACA;YAEA,IAAAqO,IAAA;YASA,IARAC,UAAAjR,SAAA,MACAgR,IAAAE,OAAAD,UAAA,KACAD;YACAA,IAAA,IACA,MAAAA,UAAAG,SAAAH,OAAAG,WACAH,SAAA,WAAAnO,KAAAuO,MAAAvO,KAAAC,IAAAkO;YAGAA,KAAArO,KACA;YAGA,KADA,IAAA0O,IAAAL,KAAA,IAAAA,IAAAnO,KAAA2B,IAAA7B,MAAAE,KAAAC,IAAAkO,IAAA,IACAK,IAAA1O,KAAA0O,KACA,IAAAA,KAAAN,OAAAM,OAAAR,eACA,OAAAQ;YAGA;;QAKAT,MAAAlU,UAAA4U,gBACAV,MAAAlU,UAAA4U,cAAA,SAAAT;YACA;YACA,aAAA7V,MACA,UAAA8V;YAEA,IAAAC,IAAAvU,OAAAxB,OACA2H,MAAAoO,EAAA/Q,WAAA;YACA,UAAA2C,KACA;YAEA,IAAAqO,IAAArO;YACAsO,UAAAjR,SAAA,MACAgR,IAAAE,OAAAD,UAAA,KACAD,SACAA,IAAA,IACA,MAAAA,UAAA,SAAAA,OAAA,WACAA,SAAA,WAAAnO,KAAAuO,MAAAvO,KAAAC,IAAAkO;YAIA,KADA,IAAAK,IAAAL,KAAA,IAAAnO,KAAA0O,IAAAP,GAAArO,MAAA,KAAAA,MAAAE,KAAAC,IAAAkO,IACAK,KAAA,GAAAA,KACA,IAAAA,KAAAN,OAAAM,OAAAR,eACA,OAAAQ;YAGA;YAIAG,OAAA9U,UAAAyM,SACAqI,OAAA9U,UAAAyM,OAAA;YACA,OAAAnO,KAAAmQ,QAAA;;;;;;;IXq6DM,SAAUzQ,QAAQD,SAASU;QYr+DjC,SAAAwO,IAAAtM,OAAApB;YACA,IAAAqB,SAAAD,MAAAG,MAAAsQ,KAAA;YACA7R,yBACAA,QAAAsC,OAAAtC,QAAAsC,QAAA,OACAnB,OAAA5B,KAAAR,MAAAqC,OAAApB,SAAAqB;;QAPA,IAAAF,SAAAjC,8CAAA,IACAgC,WAAAhC,+CAAA,GAAAgC;QAQAA,SAAAwM,KAAAvM,SAEA1C,OAAAD,UAAAkP;;;;;;IZk/DM,SAAUjP,QAAQD,SAASU;Qax/DjC,SAAA0O,YAAAxM,OAAApB;YACAA,yBACAmB,OAAA5B,KAAAR,MAAAqC,OAAApB,UACAjB,KAAAkS,aAAAlS,KAAA0D,QAAA;YAEA1D,KAAAuD,KAAAI;gBACAE,GAAA,IAAA7D,KAAAkS;;YAGA,IAAA/M,QAAAnF,KAAAuD,KAAA2B,UAAAC,QAAA,IAAAnF,KAAAkS,YACAzM,SAAAzF,KAAAuD,KAAA2B,UAAAO,SAAA,IAAAzF,KAAAkS,YACAK,SAAAvS,KAAAkS,YACAM,SAAA/M,SAAA,GAEA2I;gBAAAvK,GAAA0O;gBAAA1M,GAAA2M;eACA1G;gBACAjI,GAAA0O,SAAAvS,KAAAkS;gBAAArM,GAAAJ;;gBACA5B,GAAA0O,SAAAvS,KAAAkS,aAAA/M;gBAAAU,GAAAJ;;gBACA5B,GAAA0O,SAAAvS,KAAAkS,aAAA/M,QAAA,IAAAnF,KAAAkS;gBAAArM,GAAA;;gBACAhC,GAAA0O,SAAAvS,KAAAkS,aAAA,IAAAlS,KAAAkS;gBAAArM,GAAA;;gBACAhC,GAAA0O;gBAAA1M,GAAA2M;iBAGAlQ,SAAAsJ,SAAAvJ,OAAA+L,OAAAtC;YAEAxJ,OAAAqB;gBACA4B,QAAAvF,KAAA0D,QAAA;gBACA8B,gBAAAxF,KAAA0D,QAAA;gBACAI,MAAA9D,KAAA0D,QAAA;gBAEAzC,QAAAoD,QAAA/B,OAAAqB,KAAA,QAAA1C,QAAAoD,OACApD,QAAAyD,UAAApC,OAAAqB,KAAA,UAAA1C,QAAAyD;YACAzD,QAAA6B,QAAAR,OAAAkB,KAAAlD,KAAAW,QAAA6B,MACAR,OAAAkB,KAAAC,aAAA,SAAAzD,KAAA0D,QAAA;YAEA1D,KAAAuD,KAAAI;gBACAkC,GAAAvD,OAAA4C,UAAAO,SAAA;gBAGAzF,KAAAuC,MAAA8C,KAAA/C,SACAA,OAAAsD,aAAA5F,KAAAuD,OACAvD,KAAAsC;YAEAtC,KAAA8F;;QAhDA,IAAA1D,SAAAjC,8CAAA,IACAgC,WAAAhC,+CAAA,GAAAgC,UACA4D,UAAA5F,iDAAA,IACAyL,WAAA7F,QAAA6F;QA+CAzJ,SAAA0M,aAAAzM,SAEAyM,YAAAnN,UAAAuF,UAAA;YACA,IAAApB,IAAA7F,KAAA0G,SAAA1G,KAAAuC,MAAA2C,UAAAO,SAAA,GACA5B,IAAA7D,KAAAyG,SAAAzG,KAAAkS;YACA;gBAAArO;gBAAAgC;;WAGAgJ,YAAAnN,UAAAwF,WAAA;YACA,IAAArB,IAAA7F,KAAA0G,SAAA1G,KAAAuC,MAAA2C,UAAAO,SAAA,GACA5B,IAAA7D,KAAAyG,SAAAzG,KAAAuC,MAAA2C,UAAAC,QAAAnF,KAAAkS;YACA;gBAAArO;gBAAAgC;;WAGAnG,OAAAD,UAAAoP;;;;;;IbugEM,SAAUnP,QAAQD,SAASU;QcpkEjC,SAAAyO,UAAAvM,OAAApB;YACA,IAAAqB,SAAAD,MAAAG,MAAAsQ,KAAA;YACA7R,yBACAmB,OAAA5B,KAAAR,MAAAqC,OAAApB,SAAAqB;;QANA,IAAAF,SAAAjC,8CAAA,IACAgC,WAAAhC,+CAAA,GAAAgC;QAOAA,SAAAyM,WAAAxM,SAEA1C,OAAAD,UAAAmP;;;;;;IdilEM,SAAUlP,QAAQD,SAASU;QexlEjC,SAAAsO,MAAApM,OAAApB;YACA,IAAAqB,SAAAD,MAAAG,MAAAsQ,KAAA;YACA7R,yBACAA,QAAAsC,OAAAtC,QAAAsC,QAAA,SACAnB,OAAA5B,KAAAR,MAAAqC,OAAApB,SAAAqB;;QAPA,IAAAF,SAAAjC,8CAAA,IACAgC,WAAAhC,+CAAA,GAAAgC;QAQAA,SAAAsM,OAAArM,SAEA1C,OAAAD,UAAAgP;;;;;;If4nEM,SAAU/O,QAAQD,SAASU;QgBpoEjC,SAAA2O,WAAAzM,OAAApB;YACA,IAAAqB,SAAAD,MAAAG,MAAAsQ,KAAA;YACA7R,yBACAmB,OAAA5B,KAAAR,MAAAqC,OAAApB,SAAAqB,SAEAA,OAAAqB;gBACAwB,OAAAnF,KAAAuD,KAAA2B,UAAAC,QAAA,IAAAnF,KAAA0D,QAAA;gBAGA1D,KAAAuD,KAAAI;gBACAE,GAAA,IAAA7D,KAAA0D,QAAA;;YAGA,IAAA+S,YAAApU,MAAAG,MAAAsQ,KAAA;YACA2D,UAAA9S;gBACAE,GAAA7D,KAAA0D,QAAA;gBACA6B,QAAAvF,KAAA0D,QAAA;gBACA8B,gBAAAxF,KAAA0D,QAAA;gBACAyB,OAAAnF,KAAAuD,KAAA2B,UAAAC,QAAA,IAAAnF,KAAA0D,QAAA;gBACA+B,QAAAzF,KAAAuD,KAAA2B,UAAAO,SAAA,IAAAzF,KAAA0D,QAAA;gBACAI,MAAA9D,KAAA0D,QAAA;gBAEAzC,QAAA6B,QAAA2T,UAAAjT,KAAAlD,KAAAW,QAAA6B,MAAA;YAEA,IAAAkB,OAAAhE,KAAA0D,QAAA,SACAO,QAAAjE,KAAA0D,QAAA,gBACAQ,QAAAlE,KAAA0D,QAAA;YAEAM,QAAAyS,UAAA9S;gBAAAK;gBACAC,SAAAwS,UAAA9S;gBAAAQ,eAAAF;gBACAC,SAAAuS,UAAA9S;gBAAAS,eAAAF;gBAEAjD,QAAAoD,QAAAoS,UAAA9S,KAAA,QAAA1C,QAAAoD,OACApD,QAAAyD,UAAA+R,UAAA9S,KAAA,UAAA1C,QAAAyD;YACA1E,KAAAuC,MAAA8C,KAAAoR,YACAA,UAAA7Q,aAAA5F,KAAAuD,OAEAvD,KAAA8F;;QAxCA,IAAA1D,SAAAjC,8CAAA,IACAgC,WAAAhC,+CAAA,GAAAgC;QAyCAA,SAAA2M,YAAA1M,SAEA1C,OAAAD,UAAAqP;;;;;;IhBipEM,SAAUpP,QAAQD,SAASU;QiB7rEjC,0BAAAuW,QAAA;YACA,IAAA9V,QAAAT,6CAAA;aAEA,SAAAwW;gBACA,SAAAC,SAAAC,QAAAC;oBACA,OAAAD,UAAAC,YACAlB,MAAAmB,QAAAD,uBAAAE,SAAAH,WAAAC,SAAAE,SAAAd,OAAAW;;gBAEA,IAAAI;oBACAC,MAAA,SAAAjW;wBACA,OAAAjB,KAAAmX,KAAA;4BACA,IAAAC,QAAAT,EAAA3W;4BACAA,KAAAqC,QAAAzB,MAAAwW,MAAA7T,SACA6T,MAAAC,KAAA,KACArX,KAAAqC,MAAAgM,QAAArO,MAAAiB;;;oBAGAqW,qBAAA,SAAAC,OAAAC,YAAAC;wBACA,OAAAzX,KAAAmX,KAAA;4BACA,IAAA9U,QAAArC,KAAAqC,OAGAqV,mBAAA;4BAEA,SAAAC,YAAAtV,MAAAiE,SACA,IAAAjE,MAAAiE,QAAAsR,eAAAD,WAAA;gCACA,IAAArV,SAAAD,MAAAiE,QAAAqR,WACAE,MAAAvV,OAAAa,OAAAoU;gCACA,IAAAX,SAAAiB,KAAAL,aAAA;oCACAlV,OAAAM,YAAA6U;oCACA,SAAAK,OAAA,GAAAA,OAAAJ,eAAA1S,QAAA8S,QAAA;wCACA,IAAAC,gBAAAL,eAAAI;wCAEAxV,OAAAyV,kBACAzV,OAAAyV,eAAA,UACAzV,OAAAyV,eAAA,OAAAR,UACAX,SAAAtU,OAAAyV,eAAA,OAAAR,QAAAC,gBAEAlV,OAAAO,UAAAP,OAAAyV,eAAA;4CAAAxS,QAAAlD,MAAApB,UAAA,UAAAwW,cAAA;;;;;4BAOApV,MAAA6M,SACA7M,MAAAgM,QAAArO;;;oBAIAgY,gBAAA;wBACA,OAAAhY,KAAAmX,KAAA;4BACA,IAAA9U,QAAArC,KAAAqC;4BAEA,SAAAsV,YAAAtV,MAAAiE,SACA,IAAAjE,MAAAiE,QAAAsR,eAAAD,WAAA;gCACA,IAAAnU,OAAAnB,MAAAiE,QAAAqR;gCACAnU,KAAAZ,YAAA;;4BAIAP,MAAA6M,SACA7M,MAAAgM,QAAArO;;;;gBAKA2W,EAAAsB,GAAApE,YAAA,SAAAqE;oBACA,OAAAjB,QAAAiB,mBACAjB,QAAAiB,iBAAAC,MAAAnY,MAAA4V,MAAAlU,UAAA0W,MAAA5X,KAAAyV,WAAA,MACA,mBAAAiC,0CAIAvB,EAAA0B,MAAA,YAAAH,kBAAA,yCAFAjB,QAAAC,KAAAiB,MAAAnY,MAAAiW;;cAMAS;;;;;;;IjBwsEM,SAAUhX,QAAQD;QkBtxExBC,OAAAD,UAAAQ","file":"flowchart.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_16__) {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_16__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 9);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 15);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ }),\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ (function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ }),\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t this.lineStyle = (options.lineStyle || {});\n\t this.key = (options.key || '');\n\t this.leftLines = [];\n\t this.rightLines = [];\n\t this.topLines = [];\n\t this.bottomLines = [];\n\t this.params = options.params;\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t \n\t //ndrqu Add click function with event and options params\n\t if (options.function) { \n\t this.text.attr({ 'cursor' : 'pointer' });\n\t\n\t this.text.node.addEventListener(\"click\", function(evt) {\n\t window[options.function](evt,options);\n\t }, false);\n\t }\n\t\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t var roundness = this.getAttr('roundness');\n\t if (!isNaN(roundness)) {\n\t symbol.node.setAttribute('ry', roundness);\n\t symbol.node.setAttribute('rx', roundness);\n\t }\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t\n\t //ndrqu Add click function with event and options params\n\t if (options.function) { \n\t symbol.node.addEventListener(\"click\", function(evt) {\n\t window[options.function](evt,options);\n\t }, false);\n\t symbol.attr({ 'cursor' : 'pointer' });\n\t }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var self = this;\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.next.symbolType === 'end') return;\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else if (this.next_direction === 'left') {\n\t\n\t var leftPoint = this.getLeft();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.setY(leftPoint.y - this.next.height/2);\n\t this.next.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.next.symbolType === 'end') return;\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, this.getAttr('arrow-text') || '', this.next_direction);\n\t } else {\n\t this.drawLineTo(this.next, this.getAttr('arrow-text') || '');\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n\t if (this.connectedTo.indexOf(symbol) < 0) {\n\t this.connectedTo.push(symbol);\n\t }\n\t\n\t var x = this.getCenter().x,\n\t y = this.getCenter().y,\n\t right = this.getRight(),\n\t bottom = this.getBottom(),\n\t top = this.getTop(),\n\t left = this.getLeft();\n\t\n\t var symbolX = symbol.getCenter().x,\n\t symbolY = symbol.getCenter().y,\n\t symbolTop = symbol.getTop(),\n\t symbolRight = symbol.getRight(),\n\t symbolLeft = symbol.getLeft();\n\t\n\t var isOnSameColumn = x === symbolX,\n\t isOnSameLine = y === symbolY,\n\t isUnder = y < symbolY,\n\t isUpper = y > symbolY || this === symbol,\n\t isLeft = x > symbolX,\n\t isRight = x < symbolX;\n\t\n\t var maxX = 0,\n\t line,\n\t yOffset,\n\t lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t if (symbol.topLines.length === 0 && this.bottomLines.length === 0) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\n\t } else {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t line = drawLine(this.chart, bottom, [\n\t {x: symbolTop.x, y: symbolTop.y - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n\t if (symbol.leftLines.length === 0 && this.rightLines.length === 0) {\n\t line = drawLine(this.chart, right, symbolLeft, text);\n\t } else {\n\t yOffset = Math.max(symbol.leftLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x, y: right.y - yOffset},\n\t {x: right.x, y: symbolLeft.y - yOffset},\n\t {x: symbolLeft.x, y: symbolLeft.y - yOffset},\n\t {x: symbolLeft.x, y: symbolLeft.y}\n\t ], text);\n\t }\n\t this.rightLines.push(line);\n\t symbol.leftLines.push(line);\n\t this.rightStart = true;\n\t symbol.leftEnd = true;\n\t maxX = symbolLeft.x;\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n\t if (symbol.rightLines.length === 0 && this.leftLines.length === 0) {\n\t line = drawLine(this.chart, left, symbolRight, text);\n\t } else {\n\t yOffset = Math.max(symbol.rightLines.length, this.leftLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x, y: right.y - yOffset},\n\t {x: right.x, y: symbolRight.y - yOffset},\n\t {x: symbolRight.x, y: symbolRight.y - yOffset},\n\t {x: symbolRight.x, y: symbolRight.y}\n\t ], text);\n\t }\n\t this.leftLines.push(line);\n\t symbol.rightLines.push(line);\n\t this.leftStart = true;\n\t symbol.rightEnd = true;\n\t maxX = symbolRight.x;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n\t yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y - yOffset},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightLines.push(line);\n\t symbol.topLines.push(line);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n\t yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y - yOffset},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightLines.push(line);\n\t symbol.topLines.push(line);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2 - yOffset},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t } else {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((!origin || origin === 'bottom') && isRight && isUnder) {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t if (symbolTop.x > maxX) maxX = symbolTop.x;\n\t } else if ((!origin || origin === 'bottom') && isRight) {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2 - yOffset},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((origin && origin === 'right') && isLeft) {\n\t yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightLines.push(line);\n\t symbol.topLines.push(line);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'right') && isRight) {\n\t yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - yOffset}\n\t ], text);\n\t this.rightLines.push(line);\n\t symbol.topLines.push(line);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2 - yOffset},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + lineLength/2;\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n\t var diffX = left.x - lineLength/2;\n\t if (symbolLeft.x < left.x) {\n\t diffX = symbolLeft.x - lineLength/2;\n\t }\n\t yOffset = Math.max(symbol.topLines.length, this.leftLines.length) * 10;\n\t line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y - yOffset},\n\t {x: diffX, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftLines.push(line);\n\t symbol.topLines.push(line);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\n\t yOffset = Math.max(symbol.topLines.length, this.leftLines.length) * 10;\n\t line = drawLine(this.chart, left, [\n\t {x: symbolTop.x + (left.x - symbolTop.x)/2, y: left.y},\n\t {x: symbolTop.x + (left.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftLines.push(line);\n\t symbol.topLines.push(line);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'top')) {\n\t yOffset = Math.max(symbol.topLines.length, this.topLines.length) * 10;\n\t line = drawLine(this.chart, top, [\n\t {x: top.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.topLines.push(line);\n\t symbol.topLines.push(line);\n\t this.topStart = true;\n\t symbol.topEnd = true;\n\t maxX = top.x;\n\t }\n\t\n\t //update line style\n\t if (this.lineStyle[symbol.key] && line){\n\t line.attr(this.lineStyle[symbol.key]);\n\t }\n\t\n\t if (line) {\n\t for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n\t var otherLine = this.chart.lines[l];\n\t\n\t var ePath = otherLine.attr('path'),\n\t lPath = line.attr('path');\n\t\n\t for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n\t var newPath = [];\n\t newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n\t newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\t\n\t var line1_from_x = newPath[0][1];\n\t var line1_from_y = newPath[0][2];\n\t var line1_to_x = newPath[1][1];\n\t var line1_to_y = newPath[1][2];\n\t\n\t for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n\t var newLinePath = [];\n\t newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n\t newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\t\n\t var line2_from_x = newLinePath[0][1];\n\t var line2_from_y = newLinePath[0][2];\n\t var line2_to_x = newLinePath[1][1];\n\t var line2_to_y = newLinePath[1][2];\n\t\n\t var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n\t if (res.onLine1 && res.onLine2) {\n\t\n\t var newSegment;\n\t if (line2_from_y === line2_to_y) {\n\t if (line2_from_x > line2_to_x) {\n\t newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t } else {\n\t if (line2_from_y > line2_to_y) {\n\t newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t }\n\t\n\t lP += 2;\n\t }\n\t }\n\t }\n\t }\n\t\n\t this.chart.lines.push(line);\n\t if (this.chart.minXFromSymbols === undefined || this.chart.minXFromSymbols > left.x) {\n\t this.chart.minXFromSymbols = left.x;\n\t }\n\t }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ }),\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ (function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t var textAnchor = 'start';\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t if (from.x > firstTo.x) {\n\t x -= chart.options['text-margin']/2;\n\t textAnchor = 'end';\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t }\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t if (from.y > firstTo.y) {\n\t y -= chart.options['text-margin']*2;\n\t }\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': textAnchor,\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ }),\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 7);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 13);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 10);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 12);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 11);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 14);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\tvar Parallel = __webpack_require__(/*! ./flowchart.symbol.parallel */ 6);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s);\n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t case 'parallel':\n\t dispSymbols[s.key] = new Parallel(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else if (prevDisp instanceof(Parallel)) {\n\t if (prev.path1 === s) {\n\t prevDisp.path1(dispSymb);\n\t }\n\t if (prev.path2 === s) {\n\t prevDisp.path2(dispSymb);\n\t }\n\t if (prev.path3 === s) {\n\t prevDisp.path3(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (dispSymb instanceof(Parallel)) {\n\t if (s.path1) {\n\t constructChart(s.path1, dispSymb, s);\n\t }\n\t if (s.path2) {\n\t constructChart(s.path2, dispSymb, s);\n\t }\n\t if (s.path3) {\n\t constructChart(s.path3, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t },\n\t options: function() {\n\t return this.diagram.options;\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if (prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getStyle(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '{}';\n\t }\n\t\n\t function getSymbValue(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '';\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)];\n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t \n\t function getAnnotation(s) {\n\t\tvar startIndex = s.indexOf(\"(\") + 1, endIndex = s.indexOf(\")\");\n\t\tvar tmp = s.substring(startIndex, endIndex);\n\t\tif(tmp.indexOf(\",\") > 0) { tmp = tmp.substring(0, tmp.indexOf(\",\")); }\n\t\tvar tmp_split = tmp.split(\"@\");\n\t\tif(tmp_split.length > 1)\n\t\t\treturn startIndex >= 0 && endIndex >= 0 ? tmp_split[1] : \"\";\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0].trim();\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0].replace(/\\(.*\\)/, ''),\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null,\n\t function: null,\n\t lineStyle: {},\n\t params: {}\n\t };\n\t\n\t //parse parameters\n\t var params = parts[0].match(/\\((.*)\\)/);\n\t if (params && params.length > 1){\n\t var entries = params[1].split(',');\n\t for(var i = 0; i < entries.length; i++) {\n\t var entry = entries[i].split('=');\n\t if (entry.length == 2) {\n\t symbol.params[entry[0]] = entry[1];\n\t }\n\t }\n\t }\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':$') >= 0) {\n\t sub = symbol.text.split(':$');\n\t symbol.text = sub.shift();\n\t symbol.function = sub.join(':$');\n\t } else if (symbol.symbolType.indexOf(':$') >= 0) {\n\t sub = symbol.symbolType.split(':$');\n\t symbol.symbolType = sub.shift();\n\t symbol.function = sub.join(':$');\n\t } else if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t var ann = getAnnotation(line);\n\t if (ann) {\n\t line = line.replace('@' + ann, ''); \n\t }\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var iS = 0, lenS = flowSymbols.length; iS < lenS; iS++) {\n\t var flowSymb = flowSymbols[iS];\n\t var symbVal = getSymbValue(flowSymb);\n\t\n\t if (symbVal === 'true' || symbVal === 'false') {\n\t // map true or false to yes or no respectively\n\t flowSymb = flowSymb.replace('true', 'yes');\n\t flowSymb = flowSymb.replace('false', 'no');\n\t }\n\t \n\t var next = getNextPath(flowSymb);\n\t var realSymb = getSymbol(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (ann) {\n\t if (realSymb.symbolType === 'condition') {\n\t if (next === \"yes\" || next === \"true\") {\n\t realSymb.yes_annotation = ann;\n\t } else {\n\t realSymb.no_annotation = ann;\n\t }\n\t } else if (realSymb.symbolType === 'parallel') {\n\t if (next === 'path1') {\n\t realSymb.path1_annotation = ann;\n\t } else if (next === 'path2') {\n\t realSymb.path2_annotation = ann;\n\t } else if (next === 'path3') {\n\t realSymb.path3_annotation = ann;\n\t }\n\t }\n\t ann = null;\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (iS + 1 < lenS) {\n\t var nextSymb = flowSymbols[iS + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t } else if (line.indexOf('@>') >= 0) {\n\t\n\t // line style\n\t var lineStyleSymbols = line.split('@>');\n\t for (var iSS = 0, lenSS = lineStyleSymbols.length; iSS < lenSS; iSS++) {\n\t if ((iSS + 1) !== lenSS) {\n\t var curSymb = getSymbol(lineStyleSymbols[iSS]);\n\t var nextSymbol = getSymbol(lineStyleSymbols[iSS+1]);\n\t\n\t curSymb['lineStyle'][nextSymbol.key] = JSON.parse(getStyle(lineStyleSymbols[iSS + 1]));\n\t }\n\t }\n\t }\n\t\n\t }\n\t return chart;\n\t}\n\t\n\tmodule.exports = parse;\n\n\n/***/ }),\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction Condition(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.yes_annotation = options.yes_annotation;\n\t this.no_annotation = options.no_annotation;\n\t this.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = options.direction_yes;\n\t this.no_direction = options.direction_no;\n\t if (!this.no_direction && this.yes_direction === 'right') {\n\t this.no_direction = 'bottom';\n\t } else if (!this.yes_direction && this.no_direction === 'bottom') {\n\t this.yes_direction = 'right'\n\t }\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t this.symbol = symbol\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t var self = this;\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.right_symbol.symbolType === 'end') return;\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t \n\t if (this.left_symbol) {\n\t var leftPoint = this.getLeft();\n\t \n\t if (!this.left_symbol.isPositioned) {\n\t this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n\t this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t \n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t \n\t if (hasSymbolUnder) {\n\t if (self.left_symbol.symbolType === 'end') return;\n\t self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t \n\t this.left_symbol.isPositioned = true;\n\t \n\t this.left_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.yes_annotation ? this.yes_annotation : this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.no_annotation ? this.no_annotation : this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ }),\n/* 6 */\n/*!******************************************!*\\\n !*** ./src/flowchart.symbol.parallel.js ***!\n \\******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Parallel(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t this.path1_annotation = options.path1_annotation || '';\n\t this.path2_annotation = options.path2_annotation || '';\n\t this.path3_annotation = options.path3_annotation || '';\n\t this.textMargin = this.getAttr('text-margin');\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t this.params = options.params;\n\t if (options.direction_next === 'path1' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path2' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path3' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t\n\t if (options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path1 === 'right') {\n\t this.path2_direction = 'bottom';\n\t this.path1_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path1 === 'top') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'top';\n\t this.path3_direction = 'bottom';\n\t } else if (options.direction_path1 === 'left') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'left';\n\t this.path3_direction = 'bottom';\n\t } else {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'left';\n\t this.path3_direction = 'right';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'top';\n\t this.path3_direction = 'right';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'left';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else {\n\t this.path1_direction = options.direction_path1;\n\t this.path2_direction = options.direction_path2;\n\t this.path3_direction = options.direction_path3;\n\t }\n\t\n\t this.path1_direction = this.path1_direction || 'bottom';\n\t this.path2_direction = this.path2_direction || 'right';\n\t this.path3_direction = this.path3_direction || 'top';\n\t\n\t this.initialize();\n\t}\n\tinherits(Parallel, Symbol);\n\t\n\tParallel.prototype.render = function() {\n\t if (this.path1_direction) {\n\t this[this.path1_direction + '_symbol'] = this.path1_symbol;\n\t }\n\t\n\t if (this.path2_direction) {\n\t this[this.path2_direction + '_symbol'] = this.path2_symbol;\n\t }\n\t\n\t if (this.path3_direction) {\n\t this[this.path3_direction + '_symbol'] = this.path3_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.top_symbol) {\n\t var topPoint = this.getTop();\n\t\n\t if (!this.top_symbol.isPositioned) {\n\t this.top_symbol.shiftY(this.getY() - this.top_symbol.height - lineLength);\n\t this.top_symbol.setX(topPoint.x + this.top_symbol.width);\n\t this.top_symbol.isPositioned = true;\n\t\n\t this.top_symbol.render();\n\t }\n\t }\n\t\n\t var self = this;\n\t\n\t if (this.left_symbol) {\n\t var leftPoint = this.getLeft();\n\t\n\t if (!this.left_symbol.isPositioned) {\n\t this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n\t this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.left_symbol.symbolType === 'end') return;\n\t self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.left_symbol.isPositioned = true;\n\t\n\t this.left_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.right_symbol.symbolType === 'end') return;\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tParallel.prototype.renderLines = function() {\n\t if (this.path1_symbol) {\n\t this.drawLineTo(this.path1_symbol, this.path1_annotation, this.path1_direction);\n\t }\n\t\n\t if (this.path2_symbol) {\n\t this.drawLineTo(this.path2_symbol, this.path2_annotation, this.path2_direction);\n\t }\n\t\n\t if (this.path3_symbol) {\n\t this.drawLineTo(this.path3_symbol, this.path3_annotation, this.path3_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Parallel;\n\n/***/ }),\n/* 7 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 16);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 8);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\tvar Parallel = __webpack_require__(/*! ./flowchart.symbol.parallel */ 6);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if (symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else if (symbol instanceof(Parallel)) {\n\t symbol.path1 = function(nextSymbol) {\n\t symbol.path1_symbol = nextSymbol;\n\t if (symbol.path2_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.path2 = function(nextSymbol) {\n\t symbol.path2_symbol = nextSymbol;\n\t if (symbol.path3_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.path3 = function(nextSymbol) {\n\t symbol.path3_symbol = nextSymbol;\n\t if (symbol.path1_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t minX = 0,\n\t minY = 0,\n\t symbol,\n\t line;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t var x;\n\t var y;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t var leftX = symbol.getX()\n\t x = leftX + symbol.width;\n\t y = symbol.getY() + symbol.height;\n\t if (leftX < minX) {\n\t minX = leftX;\n\t }\n\t if (x > maxX) {\n\t maxX = x;\n\t }\n\t if (y > maxY) {\n\t maxY = y;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.lines.length; i < len; i++) {\n\t line = this.lines[i].getBBox();\n\t x = line.x;\n\t y = line.y;\n\t var x2 = line.x2;\n\t var y2 = line.y2;\n\t if (x < minX) {\n\t minX = x;\n\t }\n\t if (y < minY) {\n\t minY = y;\n\t }\n\t if (x2 > maxX) {\n\t maxX = x2;\n\t }\n\t if (y2 > maxY) {\n\t maxY = y2;\n\t }\n\t }\n\t\n\t var scale = this.options['scale'];\n\t var lineWidth = this.options['line-width'];\n\t\n\t if (this.minXFromSymbols < minX) minX = this.minXFromSymbols;\n\t\n\t if (minX < 0) minX -= lineWidth;\n\t if (minY < 0) minY -= lineWidth;\n\t\n\t var width = maxX + lineWidth - minX;\n\t var height = maxY + lineWidth - minY;\n\t\n\t this.paper.setSize(width * scale, height * scale);\n\t this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode && paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n/***/ }),\n/* 8 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ (function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t // 'roundness': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {},\n\t 'parallel': {}\n\t } //,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n/***/ }),\n/* 9 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ (function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ }),\n/* 10 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ }),\n/* 11 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t this.symbol = symbol\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ }),\n/* 12 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ }),\n/* 13 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ }),\n/* 14 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ }),\n/* 15 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\n\t\t(function( $ ) {\n\t\t\tfunction paramFit(needle, haystack) {\n\t\t\t\treturn needle == haystack ||\n\t\t\t\t( Array.isArray(haystack) && (haystack.includes(needle) || haystack.includes(Number(needle)) ))\n\t\t\t}\n\t\t\tvar methods = {\n\t\t\t\tinit : function(options) {\n\t\t\t\t\treturn this.each(function() {\n\t\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\t\tthis.chart = parse($this.text());\n\t\t\t\t\t\t$this.html('');\n\t\t\t\t\t\tthis.chart.drawSVG(this, options);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tsetFlowStateByParam : function(param, paramValue, newFlowState) {\n\t\t\t\t\treturn this.each(function() {\n\t\t\t\t\t\tvar chart = this.chart;\n\t\n\t\t\t\t\t\t// @todo this should be part of Symbol API\n\t\t\t\t\t\tvar nextSymbolKeys = ['next', 'yes', 'no', 'path1', 'path2', 'path3'];\n\t\n\t\t\t\t\t\tfor (var property in chart.symbols) {\n\t\t\t\t\t\t\tif (chart.symbols.hasOwnProperty(property)) {\n\t\t\t\t\t\t\t\tvar symbol = chart.symbols[property];\n\t\t\t\t\t\t\t\tvar val = symbol.params[param];\n\t\t\t\t\t\t\t\tif (paramFit(val, paramValue)) {\n\t\t\t\t\t\t\t\t\tsymbol.flowstate = newFlowState;\n\t\t\t\t\t\t\t\t\tfor (var nski = 0; nski < nextSymbolKeys.length; nski++) {\n\t\t\t\t\t\t\t\t\t\tvar nextSymbolKey = nextSymbolKeys[nski];\n\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey] &&\n\t\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey]['params'] &&\n\t\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey]['params'][param] &&\n\t\t\t\t\t\t\t\t\t\t\tparamFit(symbol[nextSymbolKey]['params'][param], paramValue)\n\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\tsymbol.lineStyle[symbol[nextSymbolKey]['key']] = {stroke: chart.options()['flowstate'][newFlowState]['fill']};\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tchart.clean();\n\t\t\t\t\t\tchart.drawSVG(this);\n\t\t\t\t\t});\n\t\n\t\t\t\t},\n\t\t\t\tclearFlowState: function () {\n\t\t\t\t\treturn this.each(function() {\n\t\t\t\t\t\tvar chart = this.chart;\n\t\n\t\t\t\t\t\tfor (var property in chart.symbols) {\n\t\t\t\t\t\t\tif (chart.symbols.hasOwnProperty(property)) {\n\t\t\t\t\t\t\t\tvar node = chart.symbols[property];\n\t\t\t\t\t\t\t\tnode.flowstate = '';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tchart.clean();\n\t\t\t\t\t\tchart.drawSVG(this);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t\t$.fn.flowChart = function(methodOrOptions) {\n\t\t\t\tif ( methods[methodOrOptions] ) {\n\t\t\t\t\treturn methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 ));\n\t\t\t\t} else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ) {\n\t\t\t\t\t// Default to \"init\"\n\t\t\t\t\treturn methods.init.apply( this, arguments );\n\t\t\t\t} else {\n\t\t\t\t\t$.error( 'Method ' + methodOrOptions + ' does not exist on jQuery.flowChart' );\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ }),\n/* 16 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ (function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// flowchart.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 2964692b84496f8ebedc","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./index.js\n// module id = 0\n// module chunks = 0","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.helpers.js\n// module id = 1\n// module chunks = 0","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n this.lineStyle = (options.lineStyle || {});\n this.key = (options.key || '');\n this.leftLines = [];\n this.rightLines = [];\n this.topLines = [];\n this.bottomLines = [];\n this.params = options.params;\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n \n //ndrqu Add click function with event and options params\n if (options.function) { \n this.text.attr({ 'cursor' : 'pointer' });\n\n this.text.node.addEventListener(\"click\", function(evt) {\n window[options.function](evt,options);\n }, false);\n }\n\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n var roundness = this.getAttr('roundness');\n if (!isNaN(roundness)) {\n symbol.node.setAttribute('ry', roundness);\n symbol.node.setAttribute('rx', roundness);\n }\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n\n //ndrqu Add click function with event and options params\n if (options.function) { \n symbol.node.addEventListener(\"click\", function(evt) {\n window[options.function](evt,options);\n }, false);\n symbol.attr({ 'cursor' : 'pointer' });\n }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var self = this;\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n if (self.next.symbolType === 'end') return;\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else if (this.next_direction === 'left') {\n\n var leftPoint = this.getLeft();\n\n if (!this.next.isPositioned) {\n this.next.setY(leftPoint.y - this.next.height/2);\n this.next.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n if (self.next.symbolType === 'end') return;\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, this.getAttr('arrow-text') || '', this.next_direction);\n } else {\n this.drawLineTo(this.next, this.getAttr('arrow-text') || '');\n }\n }\n};\n\nSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n if (this.connectedTo.indexOf(symbol) < 0) {\n this.connectedTo.push(symbol);\n }\n\n var x = this.getCenter().x,\n y = this.getCenter().y,\n right = this.getRight(),\n bottom = this.getBottom(),\n top = this.getTop(),\n left = this.getLeft();\n\n var symbolX = symbol.getCenter().x,\n symbolY = symbol.getCenter().y,\n symbolTop = symbol.getTop(),\n symbolRight = symbol.getRight(),\n symbolLeft = symbol.getLeft();\n\n var isOnSameColumn = x === symbolX,\n isOnSameLine = y === symbolY,\n isUnder = y < symbolY,\n isUpper = y > symbolY || this === symbol,\n isLeft = x > symbolX,\n isRight = x < symbolX;\n\n var maxX = 0,\n line,\n yOffset,\n lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n if (symbol.topLines.length === 0 && this.bottomLines.length === 0) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n } else {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n line = drawLine(this.chart, bottom, [\n {x: symbolTop.x, y: symbolTop.y - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n if (symbol.leftLines.length === 0 && this.rightLines.length === 0) {\n line = drawLine(this.chart, right, symbolLeft, text);\n } else {\n yOffset = Math.max(symbol.leftLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x, y: right.y - yOffset},\n {x: right.x, y: symbolLeft.y - yOffset},\n {x: symbolLeft.x, y: symbolLeft.y - yOffset},\n {x: symbolLeft.x, y: symbolLeft.y}\n ], text);\n }\n this.rightLines.push(line);\n symbol.leftLines.push(line);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n if (symbol.rightLines.length === 0 && this.leftLines.length === 0) {\n line = drawLine(this.chart, left, symbolRight, text);\n } else {\n yOffset = Math.max(symbol.rightLines.length, this.leftLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x, y: right.y - yOffset},\n {x: right.x, y: symbolRight.y - yOffset},\n {x: symbolRight.x, y: symbolRight.y - yOffset},\n {x: symbolRight.x, y: symbolRight.y}\n ], text);\n }\n this.leftLines.push(line);\n symbol.rightLines.push(line);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y - yOffset},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightLines.push(line);\n symbol.topLines.push(line);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y - yOffset},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightLines.push(line);\n symbol.topLines.push(line);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2 - yOffset},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n } else {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((!origin || origin === 'bottom') && isRight && isUnder) {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n if (symbolTop.x > maxX) maxX = symbolTop.x;\n } else if ((!origin || origin === 'bottom') && isRight) {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2 - yOffset},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((origin && origin === 'right') && isLeft) {\n yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightLines.push(line);\n symbol.topLines.push(line);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y - yOffset},\n {x: symbolTop.x, y: symbolTop.y - yOffset}\n ], text);\n this.rightLines.push(line);\n symbol.topLines.push(line);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2 - yOffset},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + lineLength/2;\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n var diffX = left.x - lineLength/2;\n if (symbolLeft.x < left.x) {\n diffX = symbolLeft.x - lineLength/2;\n }\n yOffset = Math.max(symbol.topLines.length, this.leftLines.length) * 10;\n line = drawLine(this.chart, left, [\n {x: diffX, y: left.y - yOffset},\n {x: diffX, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftLines.push(line);\n symbol.topLines.push(line);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\n yOffset = Math.max(symbol.topLines.length, this.leftLines.length) * 10;\n line = drawLine(this.chart, left, [\n {x: symbolTop.x + (left.x - symbolTop.x)/2, y: left.y},\n {x: symbolTop.x + (left.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftLines.push(line);\n symbol.topLines.push(line);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'top')) {\n yOffset = Math.max(symbol.topLines.length, this.topLines.length) * 10;\n line = drawLine(this.chart, top, [\n {x: top.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.topLines.push(line);\n symbol.topLines.push(line);\n this.topStart = true;\n symbol.topEnd = true;\n maxX = top.x;\n }\n\n //update line style\n if (this.lineStyle[symbol.key] && line){\n line.attr(this.lineStyle[symbol.key]);\n }\n\n if (line) {\n for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n var otherLine = this.chart.lines[l];\n\n var ePath = otherLine.attr('path'),\n lPath = line.attr('path');\n\n for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n var newPath = [];\n newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\n var line1_from_x = newPath[0][1];\n var line1_from_y = newPath[0][2];\n var line1_to_x = newPath[1][1];\n var line1_to_y = newPath[1][2];\n\n for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n var newLinePath = [];\n newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\n var line2_from_x = newLinePath[0][1];\n var line2_from_y = newLinePath[0][2];\n var line2_to_x = newLinePath[1][1];\n var line2_to_y = newLinePath[1][2];\n\n var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n if (res.onLine1 && res.onLine2) {\n\n var newSegment;\n if (line2_from_y === line2_to_y) {\n if (line2_from_x > line2_to_x) {\n newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n } else {\n if (line2_from_y > line2_to_y) {\n newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n }\n\n lP += 2;\n }\n }\n }\n }\n\n this.chart.lines.push(line);\n if (this.chart.minXFromSymbols === undefined || this.chart.minXFromSymbols > left.x) {\n this.chart.minXFromSymbols = left.x;\n }\n }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.js\n// module id = 2\n// module chunks = 0","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n var textAnchor = 'start';\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n if (from.x > firstTo.x) {\n x -= chart.options['text-margin']/2;\n textAnchor = 'end';\n } else {\n x += chart.options['text-margin']/2;\n }\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n if (from.y > firstTo.y) {\n y -= chart.options['text-margin']*2;\n }\n }\n }\n\n textPath.attr({\n 'text-anchor': textAnchor,\n 'font-size': chart.options['font-size'],\n 'fill': chart.options['font-color'],\n x: x,\n y: y\n });\n\n if (font) textPath.attr({ 'font': font });\n if (fontF) textPath.attr({ 'font-family': fontF });\n if (fontW) textPath.attr({ 'font-weight': fontW });\n }\n\n return line;\n}\n\nfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n var denominator, a, b, numerator1, numerator2, result = {\n x: null,\n y: null,\n onLine1: false,\n onLine2: false\n };\n denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n if (denominator === 0) {\n return result;\n }\n a = line1StartY - line2StartY;\n b = line1StartX - line2StartX;\n numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n a = numerator1 / denominator;\n b = numerator2 / denominator;\n\n // if we cast these lines infinitely in both directions, they intersect here:\n result.x = line1StartX + (a * (line1EndX - line1StartX));\n result.y = line1StartY + (a * (line1EndY - line1StartY));\n /*\n // it is worth noting that this should be the same as:\n x = line2StartX + (b * (line2EndX - line2StartX));\n y = line2StartX + (b * (line2EndY - line2StartY));\n */\n // if line1 is a segment and line2 is infinite, they intersect if:\n if (a > 0 && a < 1) {\n result.onLine1 = true;\n }\n // if line2 is a segment and line1 is infinite, they intersect if:\n if (b > 0 && b < 1) {\n result.onLine2 = true;\n }\n // if line1 and line2 are segments, they intersect if both of the above are true\n return result;\n}\n\nmodule.exports = {\n\tdrawPath: drawPath,\n\tdrawLine: drawLine,\n\tcheckLineIntersection: checkLineIntersection\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.functions.js\n// module id = 3\n// module chunks = 0","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\nvar Parallel = require('./flowchart.symbol.parallel');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s);\n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n case 'parallel':\n dispSymbols[s.key] = new Parallel(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else if (prevDisp instanceof(Parallel)) {\n if (prev.path1 === s) {\n prevDisp.path1(dispSymb);\n }\n if (prev.path2 === s) {\n prevDisp.path2(dispSymb);\n }\n if (prev.path3 === s) {\n prevDisp.path3(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (dispSymb instanceof(Parallel)) {\n if (s.path1) {\n constructChart(s.path1, dispSymb, s);\n }\n if (s.path2) {\n constructChart(s.path2, dispSymb, s);\n }\n if (s.path3) {\n constructChart(s.path3, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n },\n options: function() {\n return this.diagram.options;\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if (prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getStyle(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '{}';\n }\n\n function getSymbValue(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '';\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)];\n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n \n function getAnnotation(s) {\n\tvar startIndex = s.indexOf(\"(\") + 1, endIndex = s.indexOf(\")\");\n\tvar tmp = s.substring(startIndex, endIndex);\n\tif(tmp.indexOf(\",\") > 0) { tmp = tmp.substring(0, tmp.indexOf(\",\")); }\n\tvar tmp_split = tmp.split(\"@\");\n\tif(tmp_split.length > 1)\n\t\treturn startIndex >= 0 && endIndex >= 0 ? tmp_split[1] : \"\";\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0].trim();\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0].replace(/\\(.*\\)/, ''),\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null,\n function: null,\n lineStyle: {},\n params: {}\n };\n\n //parse parameters\n var params = parts[0].match(/\\((.*)\\)/);\n if (params && params.length > 1){\n var entries = params[1].split(',');\n for(var i = 0; i < entries.length; i++) {\n var entry = entries[i].split('=');\n if (entry.length == 2) {\n symbol.params[entry[0]] = entry[1];\n }\n }\n }\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':$') >= 0) {\n sub = symbol.text.split(':$');\n symbol.text = sub.shift();\n symbol.function = sub.join(':$');\n } else if (symbol.symbolType.indexOf(':$') >= 0) {\n sub = symbol.symbolType.split(':$');\n symbol.symbolType = sub.shift();\n symbol.function = sub.join(':$');\n } else if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n var ann = getAnnotation(line);\n if (ann) {\n line = line.replace('@' + ann, ''); \n }\n // flow\n var flowSymbols = line.split('->');\n for (var iS = 0, lenS = flowSymbols.length; iS < lenS; iS++) {\n var flowSymb = flowSymbols[iS];\n var symbVal = getSymbValue(flowSymb);\n\n if (symbVal === 'true' || symbVal === 'false') {\n // map true or false to yes or no respectively\n flowSymb = flowSymb.replace('true', 'yes');\n flowSymb = flowSymb.replace('false', 'no');\n }\n \n var next = getNextPath(flowSymb);\n var realSymb = getSymbol(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (ann) {\n if (realSymb.symbolType === 'condition') {\n if (next === \"yes\" || next === \"true\") {\n realSymb.yes_annotation = ann;\n } else {\n realSymb.no_annotation = ann;\n }\n } else if (realSymb.symbolType === 'parallel') {\n if (next === 'path1') {\n realSymb.path1_annotation = ann;\n } else if (next === 'path2') {\n realSymb.path2_annotation = ann;\n } else if (next === 'path3') {\n realSymb.path3_annotation = ann;\n }\n }\n ann = null;\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (iS + 1 < lenS) {\n var nextSymb = flowSymbols[iS + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n } else if (line.indexOf('@>') >= 0) {\n\n // line style\n var lineStyleSymbols = line.split('@>');\n for (var iSS = 0, lenSS = lineStyleSymbols.length; iSS < lenSS; iSS++) {\n if ((iSS + 1) !== lenSS) {\n var curSymb = getSymbol(lineStyleSymbols[iSS]);\n var nextSymbol = getSymbol(lineStyleSymbols[iSS+1]);\n\n curSymb['lineStyle'][nextSymbol.key] = JSON.parse(getStyle(lineStyleSymbols[iSS + 1]));\n }\n }\n }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.parse.js\n// module id = 4\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.yes_annotation = options.yes_annotation;\n this.no_annotation = options.no_annotation;\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = options.direction_yes;\n this.no_direction = options.direction_no;\n if (!this.no_direction && this.yes_direction === 'right') {\n this.no_direction = 'bottom';\n } else if (!this.yes_direction && this.no_direction === 'bottom') {\n this.yes_direction = 'right'\n }\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n this.symbol = symbol\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n var self = this;\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n if (self.right_symbol.symbolType === 'end') return;\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n \n if (this.left_symbol) {\n var leftPoint = this.getLeft();\n \n if (!this.left_symbol.isPositioned) {\n this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n \n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n \n if (hasSymbolUnder) {\n if (self.left_symbol.symbolType === 'end') return;\n self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n \n this.left_symbol.isPositioned = true;\n \n this.left_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.yes_annotation ? this.yes_annotation : this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.no_annotation ? this.no_annotation : this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.condition.js\n// module id = 5\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Parallel(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n this.path1_annotation = options.path1_annotation || '';\n this.path2_annotation = options.path2_annotation || '';\n this.path3_annotation = options.path3_annotation || '';\n this.textMargin = this.getAttr('text-margin');\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'top';\n this.params = options.params;\n if (options.direction_next === 'path1' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n if (options.direction_next === 'path2' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n if (options.direction_next === 'path3' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n\n if (options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3) {\n if (options.direction_path1 === 'right') {\n this.path2_direction = 'bottom';\n this.path1_direction = 'right';\n this.path3_direction = 'top';\n } else if (options.direction_path1 === 'top') {\n this.path2_direction = 'right';\n this.path1_direction = 'top';\n this.path3_direction = 'bottom';\n } else if (options.direction_path1 === 'left') {\n this.path2_direction = 'right';\n this.path1_direction = 'left';\n this.path3_direction = 'bottom';\n } else {\n this.path2_direction = 'right';\n this.path1_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else if (options.path1 && !options.direction_path1 && options.path2 && options.direction_path2 && options.path3 && !options.direction_path3) {\n if (options.direction_path2 === 'right') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'top';\n } else if (options.direction_path2 === 'left') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'left';\n this.path3_direction = 'right';\n } else {\n this.path1_direction = 'right';\n this.path2_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else if (options.path1 && !options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && options.direction_path3) {\n if (options.direction_path2 === 'right') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'top';\n this.path3_direction = 'right';\n } else if (options.direction_path2 === 'left') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'left';\n } else {\n this.path1_direction = 'right';\n this.path2_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else {\n this.path1_direction = options.direction_path1;\n this.path2_direction = options.direction_path2;\n this.path3_direction = options.direction_path3;\n }\n\n this.path1_direction = this.path1_direction || 'bottom';\n this.path2_direction = this.path2_direction || 'right';\n this.path3_direction = this.path3_direction || 'top';\n\n this.initialize();\n}\ninherits(Parallel, Symbol);\n\nParallel.prototype.render = function() {\n if (this.path1_direction) {\n this[this.path1_direction + '_symbol'] = this.path1_symbol;\n }\n\n if (this.path2_direction) {\n this[this.path2_direction + '_symbol'] = this.path2_symbol;\n }\n\n if (this.path3_direction) {\n this[this.path3_direction + '_symbol'] = this.path3_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.top_symbol) {\n var topPoint = this.getTop();\n\n if (!this.top_symbol.isPositioned) {\n this.top_symbol.shiftY(this.getY() - this.top_symbol.height - lineLength);\n this.top_symbol.setX(topPoint.x + this.top_symbol.width);\n this.top_symbol.isPositioned = true;\n\n this.top_symbol.render();\n }\n }\n\n var self = this;\n\n if (this.left_symbol) {\n var leftPoint = this.getLeft();\n\n if (!this.left_symbol.isPositioned) {\n this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n if (self.left_symbol.symbolType === 'end') return;\n self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.left_symbol.isPositioned = true;\n\n this.left_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n if (self.right_symbol.symbolType === 'end') return;\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nParallel.prototype.renderLines = function() {\n if (this.path1_symbol) {\n this.drawLineTo(this.path1_symbol, this.path1_annotation, this.path1_direction);\n }\n\n if (this.path2_symbol) {\n this.drawLineTo(this.path2_symbol, this.path2_annotation, this.path2_direction);\n }\n\n if (this.path3_symbol) {\n this.drawLineTo(this.path3_symbol, this.path3_annotation, this.path3_direction);\n }\n};\n\nmodule.exports = Parallel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.parallel.js\n// module id = 6\n// module chunks = 0","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\nvar Parallel = require('./flowchart.symbol.parallel');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if (symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else if (symbol instanceof(Parallel)) {\n symbol.path1 = function(nextSymbol) {\n symbol.path1_symbol = nextSymbol;\n if (symbol.path2_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.path2 = function(nextSymbol) {\n symbol.path2_symbol = nextSymbol;\n if (symbol.path3_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.path3 = function(nextSymbol) {\n symbol.path3_symbol = nextSymbol;\n if (symbol.path1_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n minX = 0,\n minY = 0,\n symbol,\n line;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n var x;\n var y;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n var leftX = symbol.getX()\n x = leftX + symbol.width;\n y = symbol.getY() + symbol.height;\n if (leftX < minX) {\n minX = leftX;\n }\n if (x > maxX) {\n maxX = x;\n }\n if (y > maxY) {\n maxY = y;\n }\n }\n\n for (i = 0, len = this.lines.length; i < len; i++) {\n line = this.lines[i].getBBox();\n x = line.x;\n y = line.y;\n var x2 = line.x2;\n var y2 = line.y2;\n if (x < minX) {\n minX = x;\n }\n if (y < minY) {\n minY = y;\n }\n if (x2 > maxX) {\n maxX = x2;\n }\n if (y2 > maxY) {\n maxY = y2;\n }\n }\n\n var scale = this.options['scale'];\n var lineWidth = this.options['line-width'];\n\n if (this.minXFromSymbols < minX) minX = this.minXFromSymbols;\n\n if (minX < 0) minX -= lineWidth;\n if (minY < 0) minY -= lineWidth;\n\n var width = maxX + lineWidth - minX;\n var height = maxY + lineWidth - minY;\n\n this.paper.setSize(width * scale, height * scale);\n this.paper.setViewBox(minX, minY, width, height, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode && paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.chart.js\n// module id = 7\n// module chunks = 0","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n // 'roundness': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {},\n 'parallel': {}\n } //,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.defaults.js\n// module id = 8\n// module chunks = 0","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.shim.js\n// module id = 9\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.end.js\n// module id = 10\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n this.symbol = symbol\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.inputoutput.js\n// module id = 11\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.operation.js\n// module id = 12\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.start.js\n// module id = 13\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.subroutine.js\n// module id = 14\n// module chunks = 0","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\n\t(function( $ ) {\n\t\tfunction paramFit(needle, haystack) {\n\t\t\treturn needle == haystack ||\n\t\t\t( Array.isArray(haystack) && (haystack.includes(needle) || haystack.includes(Number(needle)) ))\n\t\t}\n\t\tvar methods = {\n\t\t\tinit : function(options) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tthis.chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tthis.chart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t},\n\t\t\tsetFlowStateByParam : function(param, paramValue, newFlowState) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar chart = this.chart;\n\n\t\t\t\t\t// @todo this should be part of Symbol API\n\t\t\t\t\tvar nextSymbolKeys = ['next', 'yes', 'no', 'path1', 'path2', 'path3'];\n\n\t\t\t\t\tfor (var property in chart.symbols) {\n\t\t\t\t\t\tif (chart.symbols.hasOwnProperty(property)) {\n\t\t\t\t\t\t\tvar symbol = chart.symbols[property];\n\t\t\t\t\t\t\tvar val = symbol.params[param];\n\t\t\t\t\t\t\tif (paramFit(val, paramValue)) {\n\t\t\t\t\t\t\t\tsymbol.flowstate = newFlowState;\n\t\t\t\t\t\t\t\tfor (var nski = 0; nski < nextSymbolKeys.length; nski++) {\n\t\t\t\t\t\t\t\t\tvar nextSymbolKey = nextSymbolKeys[nski];\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey] &&\n\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey]['params'] &&\n\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey]['params'][param] &&\n\t\t\t\t\t\t\t\t\t\tparamFit(symbol[nextSymbolKey]['params'][param], paramValue)\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tsymbol.lineStyle[symbol[nextSymbolKey]['key']] = {stroke: chart.options()['flowstate'][newFlowState]['fill']};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tchart.clean();\n\t\t\t\t\tchart.drawSVG(this);\n\t\t\t\t});\n\n\t\t\t},\n\t\t\tclearFlowState: function () {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar chart = this.chart;\n\n\t\t\t\t\tfor (var property in chart.symbols) {\n\t\t\t\t\t\tif (chart.symbols.hasOwnProperty(property)) {\n\t\t\t\t\t\t\tvar node = chart.symbols[property];\n\t\t\t\t\t\t\tnode.flowstate = '';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tchart.clean();\n\t\t\t\t\tchart.drawSVG(this);\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\t$.fn.flowChart = function(methodOrOptions) {\n\t\t\tif ( methods[methodOrOptions] ) {\n\t\t\t\treturn methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 ));\n\t\t\t} else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ) {\n\t\t\t\t// Default to \"init\"\n\t\t\t\treturn methods.init.apply( this, arguments );\n\t\t\t} else {\n\t\t\t\t$.error( 'Method ' + methodOrOptions + ' does not exist on jQuery.flowChart' );\n\t\t\t}\n\t\t};\n\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/jquery-plugin.js\n// module id = 15\n// module chunks = 0","module.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"Raphael\"\n// module id = 16\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/release/flowchart.min.js b/release/flowchart.min.js index c3043097..74439aa3 100644 --- a/release/flowchart.min.js +++ b/release/flowchart.min.js @@ -1,8 +1,8 @@ -// flowchart.js, v1.17.0 -// Copyright (c)2021 Adriano Raiano (adrai). +// flowchart.js, v1.17.1 +// Copyright (c)2022 Adriano Raiano (adrai). // Distributed under MIT license // http://adrai.github.io/flowchart.js -!function(t,i){if("object"==typeof exports&&"object"==typeof module)module.exports=i(require("Raphael"));else if("function"==typeof define&&define.amd)define(["Raphael"],i);else{var e=i("object"==typeof exports?require("Raphael"):t.Raphael);for(var s in e)("object"==typeof exports?exports:t)[s]=e[s]}}(this,function(t){return function(t){function i(s){if(e[s])return e[s].exports;var n=e[s]={exports:{},id:s,loaded:!1};return t[s].call(n.exports,n,n.exports,i),n.loaded=!0,n.exports}var e={};return i.m=t,i.c=e,i.p="",i(0)}([function(t,i,e){e(9);var s=e(4);e(15);var n={parse:s};"undefined"!=typeof window&&(window.flowchart=n),t.exports=n},function(t,i){function e(t,i){if(!t||"function"==typeof t)return i;var s={};for(var n in i)s[n]=i[n];for(n in t)t[n]&&("object"==typeof s[n]?s[n]=e(s[n],t[n]):s[n]=t[n]);return s}function s(t,i){if("function"==typeof Object.create)t.super_=i,t.prototype=Object.create(i.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}});else{t.super_=i;var e=function(){};e.prototype=i.prototype,t.prototype=new e,t.prototype.constructor=t}}t.exports={defaults:e,inherits:s}},function(t,i,e){function s(t,i,e){this.chart=t,this.group=this.chart.paper.set(),this.symbol=e,this.connectedTo=[],this.symbolType=i.symbolType,this.flowstate=i.flowstate||"future",this.lineStyle=i.lineStyle||{},this.key=i.key||"",this.leftLines=[],this.rightLines=[],this.topLines=[],this.bottomLines=[],this.params=i.params,this.next_direction=i.next&&i.direction_next?i.direction_next:void 0,this.text=this.chart.paper.text(0,0,i.text),i.key&&(this.text.node.id=i.key+"t"),this.text.node.setAttribute("class",this.getAttr("class")+"t"),this.text.attr({"text-anchor":"start",x:this.getAttr("text-margin"),fill:this.getAttr("font-color"),"font-size":this.getAttr("font-size")});var s=this.getAttr("font"),n=this.getAttr("font-family"),o=this.getAttr("font-weight");s&&this.text.attr({font:s}),n&&this.text.attr({"font-family":n}),o&&this.text.attr({"font-weight":o}),i.link&&this.text.attr("href",i.link),i.function&&(this.text.attr({cursor:"pointer"}),this.text.node.addEventListener("click",function(t){window[i.function](t,i)},!1)),i.target&&this.text.attr("target",i.target);var h=this.getAttr("maxWidth");if(h){for(var r=i.text.split(" "),a="",l=0,p=r.length;lh?"\n"+y:" "+y}this.text.attr("text",a.substring(1))}if(this.group.push(this.text),e){var x=this.getAttr("text-margin");e.attr({fill:this.getAttr("fill"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*x,height:this.text.getBBox().height+2*x}),e.node.setAttribute("class",this.getAttr("class")),e.node.setAttribute("ry",this.getAttr("roundness")),e.node.setAttribute("rx",this.getAttr("roundness")),i.link&&e.attr("href",i.link),i.target&&e.attr("target",i.target),i.function&&(e.node.addEventListener("click",function(t){window[i.function](t,i)},!1),e.attr({cursor:"pointer"})),i.key&&(e.node.id=i.key),this.group.push(e),e.insertBefore(this.text),this.text.attr({y:e.getBBox().height/2}),this.initialize()}}var n=e(3),o=n.drawLine,h=n.checkLineIntersection;s.prototype.getAttr=function(t){if(this.chart){var i,e=this.chart.options?this.chart.options[t]:void 0,s=this.chart.options.symbols?this.chart.options.symbols[this.symbolType][t]:void 0;return this.chart.options.flowstate&&this.chart.options.flowstate[this.flowstate]&&(i=this.chart.options.flowstate[this.flowstate][t]),i||s||e}},s.prototype.initialize=function(){this.group.transform("t"+this.getAttr("line-width")+","+this.getAttr("line-width")),this.width=this.group.getBBox().width,this.height=this.group.getBBox().height},s.prototype.getCenter=function(){return{x:this.getX()+this.width/2,y:this.getY()+this.height/2}},s.prototype.getX=function(){return this.group.getBBox().x},s.prototype.getY=function(){return this.group.getBBox().y},s.prototype.shiftX=function(t){this.group.transform("t"+(this.getX()+t)+","+this.getY())},s.prototype.setX=function(t){this.group.transform("t"+t+","+this.getY())},s.prototype.shiftY=function(t){this.group.transform("t"+this.getX()+","+(this.getY()+t))},s.prototype.setY=function(t){this.group.transform("t"+this.getX()+","+t)},s.prototype.getTop=function(){var t=this.getY(),i=this.getX()+this.width/2;return{x:i,y:t}},s.prototype.getBottom=function(){var t=this.getY()+this.height,i=this.getX()+this.width/2;return{x:i,y:t}},s.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX();return{x:i,y:t}},s.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width;return{x:i,y:t}},s.prototype.render=function(){if(this.next){var t=this,i=this.getAttr("line-length");if("right"===this.next_direction){var e=this.getRight();this.next.isPositioned||(this.next.setY(e.y-this.next.height/2),this.next.shiftX(this.group.getBBox().x+this.width+i),function e(){for(var s,n=!1,o=0,h=t.chart.symbols.length;ot.next.getCenter().y&&r<=t.next.width/2){n=!0;break}}if(n){if("end"===t.next.symbolType)return;t.next.setX(s.getX()+s.width+i),e()}}(),this.next.isPositioned=!0,this.next.render())}else if("left"===this.next_direction){var s=this.getLeft();this.next.isPositioned||(this.next.setY(s.y-this.next.height/2),this.next.shiftX(-(this.group.getBBox().x+this.width+i)),function e(){for(var s,n=!1,o=0,h=t.chart.symbols.length;ot.next.getCenter().y&&r<=t.next.width/2){n=!0;break}}if(n){if("end"===t.next.symbolType)return;t.next.setX(s.getX()+s.width+i),e()}}(),this.next.isPositioned=!0,this.next.render())}else{var n=this.getBottom();this.next.isPositioned||(this.next.shiftY(this.getY()+this.height+i),this.next.setX(n.x-this.next.width/2),this.next.isPositioned=!0,this.next.render())}}},s.prototype.renderLines=function(){this.next&&(this.next_direction?this.drawLineTo(this.next,this.getAttr("arrow-text")||"",this.next_direction):this.drawLineTo(this.next,this.getAttr("arrow-text")||""))},s.prototype.drawLineTo=function(t,i,e){this.connectedTo.indexOf(t)<0&&this.connectedTo.push(t);var s,n,r=this.getCenter().x,a=this.getCenter().y,l=this.getRight(),p=this.getBottom(),y=this.getTop(),x=this.getLeft(),g=t.getCenter().x,f=t.getCenter().y,c=t.getTop(),d=t.getRight(),m=t.getLeft(),u=r===g,b=a===f,_=af||this===t,w=r>g,L=rk&&(k=c.x);else n=10*Math.max(t.topLines.length,this.bottomLines.length),s=this.leftEnd&&v?o(this.chart,p,[{x:p.x,y:p.y+B/2-n},{x:p.x+(p.x-c.x)/2,y:p.y+B/2-n},{x:p.x+(p.x-c.x)/2,y:c.y-B/2-n},{x:c.x,y:c.y-B/2-n},{x:c.x,y:c.y}],i):o(this.chart,p,[{x:p.x,y:c.y-B/2-n},{x:c.x,y:c.y-B/2-n},{x:c.x,y:c.y}],i),this.bottomLines.push(s),t.topLines.push(s),this.bottomStart=!0,t.topEnd=!0,k=p.x+(p.x-c.x)/2;else n=10*Math.max(t.topLines.length,this.rightLines.length),s=o(this.chart,l,[{x:l.x+B/2,y:l.y-n},{x:l.x+B/2,y:c.y-B/2-n},{x:c.x,y:c.y-B/2-n},{x:c.x,y:c.y}],i),this.rightLines.push(s),t.topLines.push(s),this.rightStart=!0,t.topEnd=!0,k=l.x+B/2;else n=10*Math.max(t.topLines.length,this.rightLines.length),s=o(this.chart,l,[{x:l.x+B/2,y:l.y-n},{x:l.x+B/2,y:c.y-B/2-n},{x:c.x,y:c.y-B/2-n},{x:c.x,y:c.y}],i),this.rightLines.push(s),t.topLines.push(s),this.rightStart=!0,t.topEnd=!0,k=l.x+B/2;else 0===t.rightLines.length&&0===this.leftLines.length?s=o(this.chart,x,d,i):(n=10*Math.max(t.rightLines.length,this.leftLines.length),s=o(this.chart,l,[{x:l.x,y:l.y-n},{x:l.x,y:d.y-n},{x:d.x,y:d.y-n},{x:d.x,y:d.y}],i)),this.leftLines.push(s),t.rightLines.push(s),this.leftStart=!0,t.rightEnd=!0,k=d.x;else 0===t.leftLines.length&&0===this.rightLines.length?s=o(this.chart,l,m,i):(n=10*Math.max(t.leftLines.length,this.rightLines.length),s=o(this.chart,l,[{x:l.x,y:l.y-n},{x:l.x,y:m.y-n},{x:m.x,y:m.y-n},{x:m.x,y:m.y}],i)),this.rightLines.push(s),t.leftLines.push(s),this.rightStart=!0,t.leftEnd=!0,k=m.x;else 0===t.topLines.length&&0===this.bottomLines.length?s=o(this.chart,p,c,i):(n=10*Math.max(t.topLines.length,this.bottomLines.length),s=o(this.chart,p,[{x:c.x,y:c.y-n},{x:c.x,y:c.y}],i)),this.bottomLines.push(s),t.topLines.push(s),this.bottomStart=!0,t.topEnd=!0,k=p.x;if(this.lineStyle[t.key]&&s&&s.attr(this.lineStyle[t.key]),s){for(var O=0,X=this.chart.lines.length;OW?(J=["L",q.x+2*A,I],C.splice($+1,0,J),J=["C",q.x+2*A,I,q.x,I-4*A,q.x-2*A,I],C.splice($+2,0,J),s.attr("path",C)):(J=["L",q.x-2*A,I],C.splice($+1,0,J),J=["C",q.x-2*A,I,q.x,I-4*A,q.x+2*A,I],C.splice($+2,0,J),s.attr("path",C)):I>Q?(J=["L",G,q.y+2*A],C.splice($+1,0,J),J=["C",G,q.y+2*A,G+4*A,q.y,G,q.y-2*A],C.splice($+2,0,J),s.attr("path",C)):(J=["L",G,q.y-2*A],C.splice($+1,0,J),J=["C",G,q.y-2*A,G+4*A,q.y,G,q.y+2*A],C.splice($+2,0,J),s.attr("path",C)),$+=2}}}this.chart.lines.push(s),(void 0===this.chart.minXFromSymbols||this.chart.minXFromSymbols>x.x)&&(this.chart.minXFromSymbols=x.x)}(!this.chart.maxXFromLine||this.chart.maxXFromLine&&k>this.chart.maxXFromLine)&&(this.chart.maxXFromLine=k)},t.exports=s},function(t,i){function e(t,i,e){var s,n,o="M{0},{1}";for(s=2,n=2*e.length+2;sd.x?i.x-(i.x-d.x)/2:d.x-(d.x-i.x)/2,u=i.y>d.y?i.y-(i.y-d.y)/2:d.y-(d.y-i.y)/2,c?(m-=g.getBBox().width/2,u-=t.options["text-margin"]):(m+=t.options["text-margin"],u-=g.getBBox().height/2)):(m=i.x,u=i.y,c?(i.x>d.x?(m-=t.options["text-margin"]/2,f="end"):m+=t.options["text-margin"]/2,u-=t.options["text-margin"]):(m+=t.options["text-margin"]/2,u+=t.options["text-margin"],i.y>d.y&&(u-=2*t.options["text-margin"]))),g.attr({"text-anchor":f,"font-size":t.options["font-size"],fill:t.options["font-color"],x:m,y:u}),l&&g.attr({font:l}),p&&g.attr({"font-family":p}),y&&g.attr({"font-weight":y})}return a}function n(t,i,e,s,n,o,h,r){var a,l,p,y,x,g={x:null,y:null,onLine1:!1,onLine2:!1};return a=(r-o)*(e-t)-(h-n)*(s-i),0===a?g:(l=i-o,p=t-n,y=(h-n)*l-(r-o)*p,x=(e-t)*l-(s-i)*p,l=y/a,p=x/a,g.x=t+l*(e-t),g.y=i+l*(s-i),l>0&&l<1&&(g.onLine1=!0),p>0&&p<1&&(g.onLine2=!0),g)}t.exports={drawPath:e,drawLine:s,checkLineIntersection:n}},function(t,i,e){function s(t){function i(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?t.substring(i,e):"{}"}function e(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?t.substring(i,e):""}function s(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?f.symbols[t.substring(0,i-1)]:f.symbols[t]}function x(t){var i="next",e=t.indexOf("(")+1,s=t.indexOf(")");return e>=0&&s>=0&&(i=F.substring(e,s),i.indexOf(",")<0&&"yes"!==i&&"no"!==i&&(i="next, "+i)),i}function g(t){var i=t.indexOf("(")+1,e=t.indexOf(")"),s=t.substring(i,e);s.indexOf(",")>0&&(s=s.substring(0,s.indexOf(",")));var n=s.split("@");if(n.length>1)return i>=0&&e>=0?n[1]:""}t=t||"",t=t.trim();for(var f={symbols:{},start:null,drawSVG:function(t,i){function e(t){if(g[t.key])return g[t.key];switch(t.symbolType){case"start":g[t.key]=new o(x,t);break;case"end":g[t.key]=new h(x,t);break;case"operation":g[t.key]=new r(x,t);break;case"inputoutput":g[t.key]=new a(x,t);break;case"subroutine":g[t.key]=new l(x,t);break;case"condition":g[t.key]=new p(x,t);break;case"parallel":g[t.key]=new y(x,t);break;default:return new Error("Wrong symbol type!")}return g[t.key]}var s=this;this.diagram&&this.diagram.clean();var x=new n(t,i);this.diagram=x;var g={};!function t(i,n,o){var h=e(i);return s.start===i?x.startWith(h):n&&o&&!n.pathOk&&(n instanceof p?(o.yes===i&&n.yes(h),o.no===i&&n.no(h)):n instanceof y?(o.path1===i&&n.path1(h),o.path2===i&&n.path2(h),o.path3===i&&n.path3(h)):n.then(h)),h.pathOk?h:(h instanceof p?(i.yes&&t(i.yes,h,i),i.no&&t(i.no,h,i)):h instanceof y?(i.path1&&t(i.path1,h,i),i.path2&&t(i.path2,h,i),i.path3&&t(i.path3,h,i)):i.next&&t(i.next,h,i),h)}(this.start),x.render()},clean:function(){this.diagram.clean()},options:function(){return this.diagram.options}},c=[],d=0,m=1,u=t.length;m")<0&&w.indexOf("=>")<0&&w.indexOf("@>")<0?(c[_-1]+="\n"+w,c.splice(_,1),v--):_++}for(;c.length>0;){var L=c.splice(0,1)[0].trim();if(L.indexOf("=>")>=0){var k=L.split("=>"),B={key:k[0].replace(/\(.*\)/,""),symbolType:k[1],text:null,link:null,target:null,flowstate:null,function:null,lineStyle:{},params:{}},A=k[0].match(/\((.*)\)/);if(A&&A.length>1)for(var M=A[1].split(","),O=0;O=0&&(T=B.symbolType.split(": "),B.symbolType=T.shift(),B.text=T.join(": ")),B.text&&B.text.indexOf(":$")>=0?(T=B.text.split(":$"),B.text=T.shift(),B.function=T.join(":$")):B.symbolType.indexOf(":$")>=0?(T=B.symbolType.split(":$"),B.symbolType=T.shift(),B.function=T.join(":$")):B.text&&B.text.indexOf(":>")>=0?(T=B.text.split(":>"),B.text=T.shift(),B.link=T.join(":>")):B.symbolType.indexOf(":>")>=0&&(T=B.symbolType.split(":>"),B.symbolType=T.shift(),B.link=T.join(":>")),B.symbolType.indexOf("\n")>=0&&(B.symbolType=B.symbolType.split("\n")[0]),B.link){var S=B.link.indexOf("[")+1,C=B.link.indexOf("]");S>=0&&C>=0&&(B.target=B.link.substring(S,C),B.link=B.link.substring(0,S-1))}if(B.text&&B.text.indexOf("|")>=0){var Y=B.text.split("|");B.flowstate=Y.pop().trim(),B.text=Y.join("|")}f.symbols[B.key]=B}else if(L.indexOf("->")>=0){var P=g(L);P&&(L=L.replace("@"+P,""));for(var j=L.split("->"),E=0,z=j.length;E=0){var G=$.split(",");$=G[0],V=G[1].trim()}if(P&&("condition"===N.symbolType?"yes"===$||"true"===$?N.yes_annotation=P:N.no_annotation=P:"parallel"===N.symbolType&&("path1"===$?N.path1_annotation=P:"path2"===$?N.path2_annotation=P:"path3"===$&&(N.path3_annotation=P)),P=null),f.start||(f.start=N),E+1")>=0)for(var W=L.split("@>"),Q=0,q=W.length;Qt.right_symbol.getCenter().y&&r<=t.right_symbol.width/2){n=!0;break}}if(n){if("end"===t.right_symbol.symbolType)return;t.right_symbol.setX(s.getX()+s.width+i),e()}}(),this.right_symbol.isPositioned=!0,this.right_symbol.render())}if(this.left_symbol){var n=this.getLeft();this.left_symbol.isPositioned||(this.left_symbol.setY(n.y-this.left_symbol.height/2),this.left_symbol.shiftX(-(this.group.getBBox().x+this.width+i)),function e(){for(var s,n=!1,o=0,h=t.chart.symbols.length;ot.left_symbol.getCenter().y&&r<=t.left_symbol.width/2){n=!0;break}}if(n){if("end"===t.left_symbol.symbolType)return;t.left_symbol.setX(s.getX()+s.width+i),e()}}(),this.left_symbol.isPositioned=!0,this.left_symbol.render())}},s.prototype.renderLines=function(){this.yes_symbol&&this.drawLineTo(this.yes_symbol,this.yes_annotation?this.yes_annotation:this.getAttr("yes-text"),this.yes_direction),this.no_symbol&&this.drawLineTo(this.no_symbol,this.no_annotation?this.no_annotation:this.getAttr("no-text"),this.no_direction)},t.exports=s},function(t,i,e){function s(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},n.call(this,t,i,e),this.path1_annotation=i.path1_annotation||"",this.path2_annotation=i.path2_annotation||"",this.path3_annotation=i.path3_annotation||"",this.textMargin=this.getAttr("text-margin"),this.path1_direction="bottom",this.path2_direction="right",this.path3_direction="top",this.params=i.params,"path1"===i.direction_next&&!i[i.direction_next]&&i.next&&(i[i.direction_next]=i.next),"path2"===i.direction_next&&!i[i.direction_next]&&i.next&&(i[i.direction_next]=i.next),"path3"===i.direction_next&&!i[i.direction_next]&&i.next&&(i[i.direction_next]=i.next),i.path1&&i.direction_path1&&i.path2&&!i.direction_path2&&i.path3&&!i.direction_path3?"right"===i.direction_path1?(this.path2_direction="bottom",this.path1_direction="right",this.path3_direction="top"):"top"===i.direction_path1?(this.path2_direction="right",this.path1_direction="top",this.path3_direction="bottom"):"left"===i.direction_path1?(this.path2_direction="right",this.path1_direction="left",this.path3_direction="bottom"):(this.path2_direction="right",this.path1_direction="bottom",this.path3_direction="top"):i.path1&&!i.direction_path1&&i.path2&&i.direction_path2&&i.path3&&!i.direction_path3?"right"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="right",this.path3_direction="top"):"left"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="left",this.path3_direction="right"):(this.path1_direction="right",this.path2_direction="bottom",this.path3_direction="top"):i.path1&&!i.direction_path1&&i.path2&&!i.direction_path2&&i.path3&&i.direction_path3?"right"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="top",this.path3_direction="right"):"left"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="right",this.path3_direction="left"):(this.path1_direction="right",this.path2_direction="bottom",this.path3_direction="top"):(this.path1_direction=i.direction_path1,this.path2_direction=i.direction_path2,this.path3_direction=i.direction_path3),this.path1_direction=this.path1_direction||"bottom",this.path2_direction=this.path2_direction||"right",this.path3_direction=this.path3_direction||"top",this.initialize()}var n=e(2),o=e(1).inherits;o(s,n),s.prototype.render=function(){this.path1_direction&&(this[this.path1_direction+"_symbol"]=this.path1_symbol),this.path2_direction&&(this[this.path2_direction+"_symbol"]=this.path2_symbol),this.path3_direction&&(this[this.path3_direction+"_symbol"]=this.path3_symbol);var t=this.getAttr("line-length");if(this.bottom_symbol){var i=this.getBottom();this.bottom_symbol.isPositioned||(this.bottom_symbol.shiftY(this.getY()+this.height+t),this.bottom_symbol.setX(i.x-this.bottom_symbol.width/2),this.bottom_symbol.isPositioned=!0,this.bottom_symbol.render())}if(this.top_symbol){var e=this.getTop();this.top_symbol.isPositioned||(this.top_symbol.shiftY(this.getY()-this.top_symbol.height-t),this.top_symbol.setX(e.x+this.top_symbol.width),this.top_symbol.isPositioned=!0,this.top_symbol.render())}var s=this;if(this.left_symbol){var n=this.getLeft();this.left_symbol.isPositioned||(this.left_symbol.setY(n.y-this.left_symbol.height/2),this.left_symbol.shiftX(-(this.group.getBBox().x+this.width+t)),function i(){for(var e,n=!1,o=0,h=s.chart.symbols.length;os.left_symbol.getCenter().y&&r<=s.left_symbol.width/2){n=!0;break}}if(n){if("end"===s.left_symbol.symbolType)return;s.left_symbol.setX(e.getX()+e.width+t),i()}}(),this.left_symbol.isPositioned=!0,this.left_symbol.render())}if(this.right_symbol){var o=this.getRight();this.right_symbol.isPositioned||(this.right_symbol.setY(o.y-this.right_symbol.height/2),this.right_symbol.shiftX(this.group.getBBox().x+this.width+t),function i(){for(var e,n=!1,o=0,h=s.chart.symbols.length;os.right_symbol.getCenter().y&&r<=s.right_symbol.width/2){n=!0;break}}if(n){if("end"===s.right_symbol.symbolType)return;s.right_symbol.setX(e.getX()+e.width+t),i()}}(),this.right_symbol.isPositioned=!0,this.right_symbol.render())}},s.prototype.renderLines=function(){this.path1_symbol&&this.drawLineTo(this.path1_symbol,this.path1_annotation,this.path1_direction),this.path2_symbol&&this.drawLineTo(this.path2_symbol,this.path2_annotation,this.path2_direction),this.path3_symbol&&this.drawLineTo(this.path3_symbol,this.path3_annotation,this.path3_direction)},t.exports=s},function(t,i,e){function s(t,i){i=i||{},this.paper=new n(t),this.options=o(i,h),this.symbols=[],this.lines=[],this.start=null}var n=e(16),o=e(1).defaults,h=e(8),r=e(5),a=e(6);s.prototype.handle=function(t){this.symbols.indexOf(t)<=-1&&this.symbols.push(t);var i=this;return t instanceof r?(t.yes=function(e){return t.yes_symbol=e,t.no_symbol&&(t.pathOk=!0),i.handle(e)},t.no=function(e){return t.no_symbol=e,t.yes_symbol&&(t.pathOk=!0),i.handle(e)}):t instanceof a?(t.path1=function(e){return t.path1_symbol=e,t.path2_symbol&&(t.pathOk=!0),i.handle(e)},t.path2=function(e){return t.path2_symbol=e,t.path3_symbol&&(t.pathOk=!0),i.handle(e)},t.path3=function(e){return t.path3_symbol=e,t.path1_symbol&&(t.pathOk=!0),i.handle(e)}):t.then=function(e){return t.next=e,t.pathOk=!0,i.handle(e)},t},s.prototype.startWith=function(t){return this.start=t,this.handle(t)},s.prototype.render=function(){var t,i,e=0,s=0,n=0,o=0,h=0,r=0,a=0,l=0;for(n=0,o=this.symbols.length;ne&&(e=t.width),t.height>s&&(s=t.height);for(n=0,o=this.symbols.length;nh&&(h=p),y>r&&(r=y)}for(n=0,o=this.lines.length;nh&&(h=g),f>r&&(r=f)}var c=this.options.scale,d=this.options["line-width"];this.minXFromSymbols>>0;if(0===e)return-1;var s=0;if(arguments.length>0&&(s=Number(arguments[1]),s!=s?s=0:0!==s&&s!=1/0&&s!=-(1/0)&&(s=(s>0||-1)*Math.floor(Math.abs(s)))),s>=e)return-1;for(var n=s>=0?s:Math.max(e-Math.abs(s),0);n>>0;if(0===e)return-1;var s=e;arguments.length>1&&(s=Number(arguments[1]),s!=s?s=0:0!==s&&s!=1/0&&s!=-(1/0)&&(s=(s>0||-1)*Math.floor(Math.abs(s))));for(var n=s>=0?Math.min(s,e-1):e-Math.abs(s);n>=0;n--)if(n in i&&i[n]===t)return n;return-1}),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")})},function(t,i,e){function s(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"End",n.call(this,t,i,e)}var n=e(2),o=e(1).inherits;o(s,n),t.exports=s},function(t,i,e){function s(t,i){i=i||{},n.call(this,t,i),this.textMargin=this.getAttr("text-margin"),this.text.attr({x:3*this.textMargin});var e=this.text.getBBox().width+4*this.textMargin,s=this.text.getBBox().height+2*this.textMargin,o=this.textMargin,h=s/2,a={x:o,y:h},l=[{x:o-this.textMargin,y:s},{x:o-this.textMargin+e,y:s},{x:o-this.textMargin+e+2*this.textMargin,y:0},{x:o-this.textMargin+2*this.textMargin,y:0},{x:o,y:h}],p=r(t,a,l);p.attr({stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),fill:this.getAttr("fill")}),i.link&&p.attr("href",i.link),i.target&&p.attr("target",i.target),i.key&&(p.node.id=i.key),p.node.setAttribute("class",this.getAttr("class")),this.text.attr({y:p.getBBox().height/2}),this.group.push(p),p.insertBefore(this.text),this.symbol=p,this.initialize()}var n=e(2),o=e(1).inherits,h=e(3),r=h.drawPath;o(s,n),s.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.textMargin;return{x:i,y:t}},s.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width-this.textMargin;return{x:i,y:t}},t.exports=s},function(t,i,e){function s(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},n.call(this,t,i,e)}var n=e(2),o=e(1).inherits;o(s,n),t.exports=s},function(t,i,e){function s(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"Start",n.call(this,t,i,e)}var n=e(2),o=e(1).inherits;o(s,n),t.exports=s},function(t,i,e){function s(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},n.call(this,t,i,e),e.attr({width:this.text.getBBox().width+4*this.getAttr("text-margin")}),this.text.attr({x:2*this.getAttr("text-margin")});var s=t.paper.rect(0,0,0,0);s.attr({x:this.getAttr("text-margin"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*this.getAttr("text-margin"),height:this.text.getBBox().height+2*this.getAttr("text-margin"),fill:this.getAttr("fill")}),i.key&&(s.node.id=i.key+"i");var o=this.getAttr("font"),h=this.getAttr("font-family"),r=this.getAttr("font-weight");o&&s.attr({font:o}),h&&s.attr({"font-family":h}),r&&s.attr({"font-weight":r}),i.link&&s.attr("href",i.link),i.target&&s.attr("target",i.target),this.group.push(s),s.insertBefore(this.text),this.initialize()}var n=e(2),o=e(1).inherits;o(s,n),t.exports=s},function(t,i,e){if("undefined"!=typeof jQuery){var s=e(4);!function(t){function i(t,i){return t==i||Array.isArray(i)&&(i.includes(t)||i.includes(Number(t)))}var e={init:function(i){return this.each(function(){ -var e=t(this);this.chart=s(e.text()),e.html(""),this.chart.drawSVG(this,i)})},setFlowStateByParam:function(t,e,s){return this.each(function(){var n=this.chart,o=["next","yes","no","path1","path2","path3"];for(var h in n.symbols)if(n.symbols.hasOwnProperty(h)){var r=n.symbols[h],a=r.params[t];if(i(a,e)){r.flowstate=s;for(var l=0;lh?"\n"+y:" "+y}this.text.attr("text",a.substring(1))}if(this.group.push(this.text),e){var x=this.getAttr("text-margin");e.attr({fill:this.getAttr("fill"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*x,height:this.text.getBBox().height+2*x}),e.node.setAttribute("class",this.getAttr("class"));var g=this.getAttr("roundness");isNaN(g)||(e.node.setAttribute("ry",g),e.node.setAttribute("rx",g)),i.link&&e.attr("href",i.link),i.target&&e.attr("target",i.target),i.function&&(e.node.addEventListener("click",function(t){window[i.function](t,i)},!1),e.attr({cursor:"pointer"})),i.key&&(e.node.id=i.key),this.group.push(e),e.insertBefore(this.text),this.text.attr({y:e.getBBox().height/2}),this.initialize()}}var n=e(3),o=n.drawLine,h=n.checkLineIntersection;s.prototype.getAttr=function(t){if(this.chart){var i,e=this.chart.options?this.chart.options[t]:void 0,s=this.chart.options.symbols?this.chart.options.symbols[this.symbolType][t]:void 0;return this.chart.options.flowstate&&this.chart.options.flowstate[this.flowstate]&&(i=this.chart.options.flowstate[this.flowstate][t]),i||s||e}},s.prototype.initialize=function(){this.group.transform("t"+this.getAttr("line-width")+","+this.getAttr("line-width")),this.width=this.group.getBBox().width,this.height=this.group.getBBox().height},s.prototype.getCenter=function(){return{x:this.getX()+this.width/2,y:this.getY()+this.height/2}},s.prototype.getX=function(){return this.group.getBBox().x},s.prototype.getY=function(){return this.group.getBBox().y},s.prototype.shiftX=function(t){this.group.transform("t"+(this.getX()+t)+","+this.getY())},s.prototype.setX=function(t){this.group.transform("t"+t+","+this.getY())},s.prototype.shiftY=function(t){this.group.transform("t"+this.getX()+","+(this.getY()+t))},s.prototype.setY=function(t){this.group.transform("t"+this.getX()+","+t)},s.prototype.getTop=function(){var t=this.getY(),i=this.getX()+this.width/2;return{x:i,y:t}},s.prototype.getBottom=function(){var t=this.getY()+this.height,i=this.getX()+this.width/2;return{x:i,y:t}},s.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX();return{x:i,y:t}},s.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width;return{x:i,y:t}},s.prototype.render=function(){if(this.next){var t=this,i=this.getAttr("line-length");if("right"===this.next_direction){var e=this.getRight();this.next.isPositioned||(this.next.setY(e.y-this.next.height/2),this.next.shiftX(this.group.getBBox().x+this.width+i),function e(){for(var s,n=!1,o=0,h=t.chart.symbols.length;ot.next.getCenter().y&&r<=t.next.width/2){n=!0;break}}if(n){if("end"===t.next.symbolType)return;t.next.setX(s.getX()+s.width+i),e()}}(),this.next.isPositioned=!0,this.next.render())}else if("left"===this.next_direction){var s=this.getLeft();this.next.isPositioned||(this.next.setY(s.y-this.next.height/2),this.next.shiftX(-(this.group.getBBox().x+this.width+i)),function e(){for(var s,n=!1,o=0,h=t.chart.symbols.length;ot.next.getCenter().y&&r<=t.next.width/2){n=!0;break}}if(n){if("end"===t.next.symbolType)return;t.next.setX(s.getX()+s.width+i),e()}}(),this.next.isPositioned=!0,this.next.render())}else{var n=this.getBottom();this.next.isPositioned||(this.next.shiftY(this.getY()+this.height+i),this.next.setX(n.x-this.next.width/2),this.next.isPositioned=!0,this.next.render())}}},s.prototype.renderLines=function(){this.next&&(this.next_direction?this.drawLineTo(this.next,this.getAttr("arrow-text")||"",this.next_direction):this.drawLineTo(this.next,this.getAttr("arrow-text")||""))},s.prototype.drawLineTo=function(t,i,e){this.connectedTo.indexOf(t)<0&&this.connectedTo.push(t);var s,n,r=this.getCenter().x,a=this.getCenter().y,l=this.getRight(),p=this.getBottom(),y=this.getTop(),x=this.getLeft(),g=t.getCenter().x,f=t.getCenter().y,c=t.getTop(),d=t.getRight(),m=t.getLeft(),u=r===g,b=a===f,_=af||this===t,w=r>g,L=rk&&(k=c.x);else n=10*Math.max(t.topLines.length,this.bottomLines.length),s=this.leftEnd&&v?o(this.chart,p,[{x:p.x,y:p.y+B/2-n},{x:p.x+(p.x-c.x)/2,y:p.y+B/2-n},{x:p.x+(p.x-c.x)/2,y:c.y-B/2-n},{x:c.x,y:c.y-B/2-n},{x:c.x,y:c.y}],i):o(this.chart,p,[{x:p.x,y:c.y-B/2-n},{x:c.x,y:c.y-B/2-n},{x:c.x,y:c.y}],i),this.bottomLines.push(s),t.topLines.push(s),this.bottomStart=!0,t.topEnd=!0,k=p.x+(p.x-c.x)/2;else n=10*Math.max(t.topLines.length,this.rightLines.length),s=o(this.chart,l,[{x:l.x+B/2,y:l.y-n},{x:l.x+B/2,y:c.y-B/2-n},{x:c.x,y:c.y-B/2-n},{x:c.x,y:c.y}],i),this.rightLines.push(s),t.topLines.push(s),this.rightStart=!0,t.topEnd=!0,k=l.x+B/2;else n=10*Math.max(t.topLines.length,this.rightLines.length),s=o(this.chart,l,[{x:l.x+B/2,y:l.y-n},{x:l.x+B/2,y:c.y-B/2-n},{x:c.x,y:c.y-B/2-n},{x:c.x,y:c.y}],i),this.rightLines.push(s),t.topLines.push(s),this.rightStart=!0,t.topEnd=!0,k=l.x+B/2;else 0===t.rightLines.length&&0===this.leftLines.length?s=o(this.chart,x,d,i):(n=10*Math.max(t.rightLines.length,this.leftLines.length),s=o(this.chart,l,[{x:l.x,y:l.y-n},{x:l.x,y:d.y-n},{x:d.x,y:d.y-n},{x:d.x,y:d.y}],i)),this.leftLines.push(s),t.rightLines.push(s),this.leftStart=!0,t.rightEnd=!0,k=d.x;else 0===t.leftLines.length&&0===this.rightLines.length?s=o(this.chart,l,m,i):(n=10*Math.max(t.leftLines.length,this.rightLines.length),s=o(this.chart,l,[{x:l.x,y:l.y-n},{x:l.x,y:m.y-n},{x:m.x,y:m.y-n},{x:m.x,y:m.y}],i)),this.rightLines.push(s),t.leftLines.push(s),this.rightStart=!0,t.leftEnd=!0,k=m.x;else 0===t.topLines.length&&0===this.bottomLines.length?s=o(this.chart,p,c,i):(n=10*Math.max(t.topLines.length,this.bottomLines.length),s=o(this.chart,p,[{x:c.x,y:c.y-n},{x:c.x,y:c.y}],i)),this.bottomLines.push(s),t.topLines.push(s),this.bottomStart=!0,t.topEnd=!0,k=p.x;if(this.lineStyle[t.key]&&s&&s.attr(this.lineStyle[t.key]),s){for(var O=0,X=this.chart.lines.length;OW?(J=["L",q.x+2*A,I],C.splice(N+1,0,J),J=["C",q.x+2*A,I,q.x,I-4*A,q.x-2*A,I],C.splice(N+2,0,J),s.attr("path",C)):(J=["L",q.x-2*A,I],C.splice(N+1,0,J),J=["C",q.x-2*A,I,q.x,I-4*A,q.x+2*A,I],C.splice(N+2,0,J),s.attr("path",C)):I>Q?(J=["L",G,q.y+2*A],C.splice(N+1,0,J),J=["C",G,q.y+2*A,G+4*A,q.y,G,q.y-2*A],C.splice(N+2,0,J),s.attr("path",C)):(J=["L",G,q.y-2*A],C.splice(N+1,0,J),J=["C",G,q.y-2*A,G+4*A,q.y,G,q.y+2*A],C.splice(N+2,0,J),s.attr("path",C)),N+=2}}}this.chart.lines.push(s),(void 0===this.chart.minXFromSymbols||this.chart.minXFromSymbols>x.x)&&(this.chart.minXFromSymbols=x.x)}(!this.chart.maxXFromLine||this.chart.maxXFromLine&&k>this.chart.maxXFromLine)&&(this.chart.maxXFromLine=k)},t.exports=s},function(t,i){function e(t,i,e){var s,n,o="M{0},{1}";for(s=2,n=2*e.length+2;sd.x?i.x-(i.x-d.x)/2:d.x-(d.x-i.x)/2,u=i.y>d.y?i.y-(i.y-d.y)/2:d.y-(d.y-i.y)/2,c?(m-=g.getBBox().width/2,u-=t.options["text-margin"]):(m+=t.options["text-margin"],u-=g.getBBox().height/2)):(m=i.x,u=i.y,c?(i.x>d.x?(m-=t.options["text-margin"]/2,f="end"):m+=t.options["text-margin"]/2,u-=t.options["text-margin"]):(m+=t.options["text-margin"]/2,u+=t.options["text-margin"],i.y>d.y&&(u-=2*t.options["text-margin"]))),g.attr({"text-anchor":f,"font-size":t.options["font-size"],fill:t.options["font-color"],x:m,y:u}),l&&g.attr({font:l}),p&&g.attr({"font-family":p}),y&&g.attr({"font-weight":y})}return a}function n(t,i,e,s,n,o,h,r){var a,l,p,y,x,g={x:null,y:null,onLine1:!1,onLine2:!1};return a=(r-o)*(e-t)-(h-n)*(s-i),0===a?g:(l=i-o,p=t-n,y=(h-n)*l-(r-o)*p,x=(e-t)*l-(s-i)*p,l=y/a,p=x/a,g.x=t+l*(e-t),g.y=i+l*(s-i),l>0&&l<1&&(g.onLine1=!0),p>0&&p<1&&(g.onLine2=!0),g)}t.exports={drawPath:e,drawLine:s,checkLineIntersection:n}},function(t,i,e){function s(t){function i(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?t.substring(i,e):"{}"}function e(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?t.substring(i,e):""}function s(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?f.symbols[t.substring(0,i-1)]:f.symbols[t]}function x(t){var i="next",e=t.indexOf("(")+1,s=t.indexOf(")");return e>=0&&s>=0&&(i=F.substring(e,s),i.indexOf(",")<0&&"yes"!==i&&"no"!==i&&(i="next, "+i)),i}function g(t){var i=t.indexOf("(")+1,e=t.indexOf(")"),s=t.substring(i,e);s.indexOf(",")>0&&(s=s.substring(0,s.indexOf(",")));var n=s.split("@");if(n.length>1)return i>=0&&e>=0?n[1]:""}t=t||"",t=t.trim();for(var f={symbols:{},start:null,drawSVG:function(t,i){function e(t){if(g[t.key])return g[t.key];switch(t.symbolType){case"start":g[t.key]=new o(x,t);break;case"end":g[t.key]=new h(x,t);break;case"operation":g[t.key]=new r(x,t);break;case"inputoutput":g[t.key]=new a(x,t);break;case"subroutine":g[t.key]=new l(x,t);break;case"condition":g[t.key]=new p(x,t);break;case"parallel":g[t.key]=new y(x,t);break;default:return new Error("Wrong symbol type!")}return g[t.key]}var s=this;this.diagram&&this.diagram.clean();var x=new n(t,i);this.diagram=x;var g={};!function t(i,n,o){var h=e(i);return s.start===i?x.startWith(h):n&&o&&!n.pathOk&&(n instanceof p?(o.yes===i&&n.yes(h),o.no===i&&n.no(h)):n instanceof y?(o.path1===i&&n.path1(h),o.path2===i&&n.path2(h),o.path3===i&&n.path3(h)):n.then(h)),h.pathOk?h:(h instanceof p?(i.yes&&t(i.yes,h,i),i.no&&t(i.no,h,i)):h instanceof y?(i.path1&&t(i.path1,h,i),i.path2&&t(i.path2,h,i),i.path3&&t(i.path3,h,i)):i.next&&t(i.next,h,i),h)}(this.start),x.render()},clean:function(){this.diagram.clean()},options:function(){return this.diagram.options}},c=[],d=0,m=1,u=t.length;m")<0&&w.indexOf("=>")<0&&w.indexOf("@>")<0?(c[_-1]+="\n"+w,c.splice(_,1),v--):_++}for(;c.length>0;){var L=c.splice(0,1)[0].trim();if(L.indexOf("=>")>=0){var k=L.split("=>"),B={key:k[0].replace(/\(.*\)/,""),symbolType:k[1],text:null,link:null,target:null,flowstate:null,function:null,lineStyle:{},params:{}},A=k[0].match(/\((.*)\)/);if(A&&A.length>1)for(var M=A[1].split(","),O=0;O=0&&(T=B.symbolType.split(": "),B.symbolType=T.shift(),B.text=T.join(": ")),B.text&&B.text.indexOf(":$")>=0?(T=B.text.split(":$"),B.text=T.shift(),B.function=T.join(":$")):B.symbolType.indexOf(":$")>=0?(T=B.symbolType.split(":$"),B.symbolType=T.shift(),B.function=T.join(":$")):B.text&&B.text.indexOf(":>")>=0?(T=B.text.split(":>"),B.text=T.shift(),B.link=T.join(":>")):B.symbolType.indexOf(":>")>=0&&(T=B.symbolType.split(":>"),B.symbolType=T.shift(),B.link=T.join(":>")),B.symbolType.indexOf("\n")>=0&&(B.symbolType=B.symbolType.split("\n")[0]),B.link){var S=B.link.indexOf("[")+1,C=B.link.indexOf("]");S>=0&&C>=0&&(B.target=B.link.substring(S,C),B.link=B.link.substring(0,S-1))}if(B.text&&B.text.indexOf("|")>=0){var Y=B.text.split("|");B.flowstate=Y.pop().trim(),B.text=Y.join("|")}f.symbols[B.key]=B}else if(L.indexOf("->")>=0){var P=g(L);P&&(L=L.replace("@"+P,""));for(var j=L.split("->"),E=0,z=j.length;E=0){var G=N.split(",");N=G[0],V=G[1].trim()}if(P&&("condition"===$.symbolType?"yes"===N||"true"===N?$.yes_annotation=P:$.no_annotation=P:"parallel"===$.symbolType&&("path1"===N?$.path1_annotation=P:"path2"===N?$.path2_annotation=P:"path3"===N&&($.path3_annotation=P)),P=null),f.start||(f.start=$),E+1")>=0)for(var W=L.split("@>"),Q=0,q=W.length;Qt.right_symbol.getCenter().y&&r<=t.right_symbol.width/2){n=!0;break}}if(n){if("end"===t.right_symbol.symbolType)return;t.right_symbol.setX(s.getX()+s.width+i),e()}}(),this.right_symbol.isPositioned=!0,this.right_symbol.render())}if(this.left_symbol){var n=this.getLeft();this.left_symbol.isPositioned||(this.left_symbol.setY(n.y-this.left_symbol.height/2),this.left_symbol.shiftX(-(this.group.getBBox().x+this.width+i)),function e(){for(var s,n=!1,o=0,h=t.chart.symbols.length;ot.left_symbol.getCenter().y&&r<=t.left_symbol.width/2){n=!0;break}}if(n){if("end"===t.left_symbol.symbolType)return;t.left_symbol.setX(s.getX()+s.width+i),e()}}(),this.left_symbol.isPositioned=!0,this.left_symbol.render())}},s.prototype.renderLines=function(){this.yes_symbol&&this.drawLineTo(this.yes_symbol,this.yes_annotation?this.yes_annotation:this.getAttr("yes-text"),this.yes_direction),this.no_symbol&&this.drawLineTo(this.no_symbol,this.no_annotation?this.no_annotation:this.getAttr("no-text"),this.no_direction)},t.exports=s},function(t,i,e){function s(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},n.call(this,t,i,e),this.path1_annotation=i.path1_annotation||"",this.path2_annotation=i.path2_annotation||"",this.path3_annotation=i.path3_annotation||"",this.textMargin=this.getAttr("text-margin"),this.path1_direction="bottom",this.path2_direction="right",this.path3_direction="top",this.params=i.params,"path1"===i.direction_next&&!i[i.direction_next]&&i.next&&(i[i.direction_next]=i.next),"path2"===i.direction_next&&!i[i.direction_next]&&i.next&&(i[i.direction_next]=i.next),"path3"===i.direction_next&&!i[i.direction_next]&&i.next&&(i[i.direction_next]=i.next),i.path1&&i.direction_path1&&i.path2&&!i.direction_path2&&i.path3&&!i.direction_path3?"right"===i.direction_path1?(this.path2_direction="bottom",this.path1_direction="right",this.path3_direction="top"):"top"===i.direction_path1?(this.path2_direction="right",this.path1_direction="top",this.path3_direction="bottom"):"left"===i.direction_path1?(this.path2_direction="right",this.path1_direction="left",this.path3_direction="bottom"):(this.path2_direction="right",this.path1_direction="bottom",this.path3_direction="top"):i.path1&&!i.direction_path1&&i.path2&&i.direction_path2&&i.path3&&!i.direction_path3?"right"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="right",this.path3_direction="top"):"left"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="left",this.path3_direction="right"):(this.path1_direction="right",this.path2_direction="bottom",this.path3_direction="top"):i.path1&&!i.direction_path1&&i.path2&&!i.direction_path2&&i.path3&&i.direction_path3?"right"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="top",this.path3_direction="right"):"left"===i.direction_path2?(this.path1_direction="bottom",this.path2_direction="right",this.path3_direction="left"):(this.path1_direction="right",this.path2_direction="bottom",this.path3_direction="top"):(this.path1_direction=i.direction_path1,this.path2_direction=i.direction_path2,this.path3_direction=i.direction_path3),this.path1_direction=this.path1_direction||"bottom",this.path2_direction=this.path2_direction||"right",this.path3_direction=this.path3_direction||"top",this.initialize()}var n=e(2),o=e(1).inherits;o(s,n),s.prototype.render=function(){this.path1_direction&&(this[this.path1_direction+"_symbol"]=this.path1_symbol),this.path2_direction&&(this[this.path2_direction+"_symbol"]=this.path2_symbol),this.path3_direction&&(this[this.path3_direction+"_symbol"]=this.path3_symbol);var t=this.getAttr("line-length");if(this.bottom_symbol){var i=this.getBottom();this.bottom_symbol.isPositioned||(this.bottom_symbol.shiftY(this.getY()+this.height+t),this.bottom_symbol.setX(i.x-this.bottom_symbol.width/2),this.bottom_symbol.isPositioned=!0,this.bottom_symbol.render())}if(this.top_symbol){var e=this.getTop();this.top_symbol.isPositioned||(this.top_symbol.shiftY(this.getY()-this.top_symbol.height-t),this.top_symbol.setX(e.x+this.top_symbol.width),this.top_symbol.isPositioned=!0,this.top_symbol.render())}var s=this;if(this.left_symbol){var n=this.getLeft();this.left_symbol.isPositioned||(this.left_symbol.setY(n.y-this.left_symbol.height/2),this.left_symbol.shiftX(-(this.group.getBBox().x+this.width+t)),function i(){for(var e,n=!1,o=0,h=s.chart.symbols.length;os.left_symbol.getCenter().y&&r<=s.left_symbol.width/2){n=!0;break}}if(n){if("end"===s.left_symbol.symbolType)return;s.left_symbol.setX(e.getX()+e.width+t),i()}}(),this.left_symbol.isPositioned=!0,this.left_symbol.render())}if(this.right_symbol){var o=this.getRight();this.right_symbol.isPositioned||(this.right_symbol.setY(o.y-this.right_symbol.height/2),this.right_symbol.shiftX(this.group.getBBox().x+this.width+t),function i(){for(var e,n=!1,o=0,h=s.chart.symbols.length;os.right_symbol.getCenter().y&&r<=s.right_symbol.width/2){n=!0;break}}if(n){if("end"===s.right_symbol.symbolType)return;s.right_symbol.setX(e.getX()+e.width+t),i()}}(),this.right_symbol.isPositioned=!0,this.right_symbol.render())}},s.prototype.renderLines=function(){this.path1_symbol&&this.drawLineTo(this.path1_symbol,this.path1_annotation,this.path1_direction),this.path2_symbol&&this.drawLineTo(this.path2_symbol,this.path2_annotation,this.path2_direction),this.path3_symbol&&this.drawLineTo(this.path3_symbol,this.path3_annotation,this.path3_direction)},t.exports=s},function(t,i,e){function s(t,i){i=i||{},this.paper=new n(t),this.options=o(i,h),this.symbols=[],this.lines=[],this.start=null}var n=e(16),o=e(1).defaults,h=e(8),r=e(5),a=e(6);s.prototype.handle=function(t){this.symbols.indexOf(t)<=-1&&this.symbols.push(t);var i=this;return t instanceof r?(t.yes=function(e){return t.yes_symbol=e,t.no_symbol&&(t.pathOk=!0),i.handle(e)},t.no=function(e){return t.no_symbol=e,t.yes_symbol&&(t.pathOk=!0),i.handle(e)}):t instanceof a?(t.path1=function(e){return t.path1_symbol=e,t.path2_symbol&&(t.pathOk=!0),i.handle(e)},t.path2=function(e){return t.path2_symbol=e,t.path3_symbol&&(t.pathOk=!0),i.handle(e)},t.path3=function(e){return t.path3_symbol=e,t.path1_symbol&&(t.pathOk=!0),i.handle(e)}):t.then=function(e){return t.next=e,t.pathOk=!0,i.handle(e)},t},s.prototype.startWith=function(t){return this.start=t,this.handle(t)},s.prototype.render=function(){var t,i,e=0,s=0,n=0,o=0,h=0,r=0,a=0,l=0;for(n=0,o=this.symbols.length;ne&&(e=t.width),t.height>s&&(s=t.height);for(n=0,o=this.symbols.length;nh&&(h=p),y>r&&(r=y)}for(n=0,o=this.lines.length;nh&&(h=g),f>r&&(r=f)}var c=this.options.scale,d=this.options["line-width"];this.minXFromSymbols>>0;if(0===e)return-1;var s=0;if(arguments.length>0&&(s=Number(arguments[1]),s!=s?s=0:0!==s&&s!=1/0&&s!=-(1/0)&&(s=(s>0||-1)*Math.floor(Math.abs(s)))),s>=e)return-1;for(var n=s>=0?s:Math.max(e-Math.abs(s),0);n>>0;if(0===e)return-1;var s=e;arguments.length>1&&(s=Number(arguments[1]),s!=s?s=0:0!==s&&s!=1/0&&s!=-(1/0)&&(s=(s>0||-1)*Math.floor(Math.abs(s))));for(var n=s>=0?Math.min(s,e-1):e-Math.abs(s);n>=0;n--)if(n in i&&i[n]===t)return n;return-1}),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")})},function(t,i,e){function s(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"End",n.call(this,t,i,e)}var n=e(2),o=e(1).inherits;o(s,n),t.exports=s},function(t,i,e){function s(t,i){i=i||{},n.call(this,t,i),this.textMargin=this.getAttr("text-margin"),this.text.attr({x:3*this.textMargin});var e=this.text.getBBox().width+4*this.textMargin,s=this.text.getBBox().height+2*this.textMargin,o=this.textMargin,h=s/2,a={x:o,y:h},l=[{x:o-this.textMargin,y:s},{x:o-this.textMargin+e,y:s},{x:o-this.textMargin+e+2*this.textMargin,y:0},{x:o-this.textMargin+2*this.textMargin,y:0},{x:o,y:h}],p=r(t,a,l);p.attr({stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),fill:this.getAttr("fill")}),i.link&&p.attr("href",i.link),i.target&&p.attr("target",i.target),i.key&&(p.node.id=i.key),p.node.setAttribute("class",this.getAttr("class")),this.text.attr({y:p.getBBox().height/2}),this.group.push(p),p.insertBefore(this.text),this.symbol=p,this.initialize()}var n=e(2),o=e(1).inherits,h=e(3),r=h.drawPath;o(s,n),s.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.textMargin;return{x:i,y:t}},s.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width-this.textMargin;return{x:i,y:t}},t.exports=s},function(t,i,e){function s(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},n.call(this,t,i,e)}var n=e(2),o=e(1).inherits;o(s,n),t.exports=s},function(t,i,e){function s(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"Start",n.call(this,t,i,e)}var n=e(2),o=e(1).inherits;o(s,n),t.exports=s},function(t,i,e){function s(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},n.call(this,t,i,e),e.attr({width:this.text.getBBox().width+4*this.getAttr("text-margin")}),this.text.attr({x:2*this.getAttr("text-margin")});var s=t.paper.rect(0,0,0,0);s.attr({x:this.getAttr("text-margin"),stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),width:this.text.getBBox().width+2*this.getAttr("text-margin"),height:this.text.getBBox().height+2*this.getAttr("text-margin"),fill:this.getAttr("fill")}),i.key&&(s.node.id=i.key+"i");var o=this.getAttr("font"),h=this.getAttr("font-family"),r=this.getAttr("font-weight");o&&s.attr({font:o}),h&&s.attr({"font-family":h}),r&&s.attr({"font-weight":r}),i.link&&s.attr("href",i.link),i.target&&s.attr("target",i.target),this.group.push(s),s.insertBefore(this.text),this.initialize()}var n=e(2),o=e(1).inherits;o(s,n),t.exports=s},function(t,i,e){if("undefined"!=typeof jQuery){var s=e(4);!function(t){function i(t,i){return t==i||Array.isArray(i)&&(i.includes(t)||i.includes(Number(t)))}var e={init:function(i){return this.each(function(){var e=t(this); +this.chart=s(e.text()),e.html(""),this.chart.drawSVG(this,i)})},setFlowStateByParam:function(t,e,s){return this.each(function(){var n=this.chart,o=["next","yes","no","path1","path2","path3"];for(var h in n.symbols)if(n.symbols.hasOwnProperty(h)){var r=n.symbols[h],a=r.params[t];if(i(a,e)){r.flowstate=s;for(var l=0;l maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t symbol.node.setAttribute('ry', this.getAttr('roundness'));\n\t symbol.node.setAttribute('rx', this.getAttr('roundness'));\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t\n\t //ndrqu Add click function with event and options params\n\t if (options.function) { \n\t symbol.node.addEventListener(\"click\", function(evt) {\n\t window[options.function](evt,options);\n\t }, false);\n\t symbol.attr({ 'cursor' : 'pointer' });\n\t }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var self = this;\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.next.symbolType === 'end') return;\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else if (this.next_direction === 'left') {\n\t\n\t var leftPoint = this.getLeft();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.setY(leftPoint.y - this.next.height/2);\n\t this.next.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.next.symbolType === 'end') return;\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, this.getAttr('arrow-text') || '', this.next_direction);\n\t } else {\n\t this.drawLineTo(this.next, this.getAttr('arrow-text') || '');\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n\t if (this.connectedTo.indexOf(symbol) < 0) {\n\t this.connectedTo.push(symbol);\n\t }\n\t\n\t var x = this.getCenter().x,\n\t y = this.getCenter().y,\n\t right = this.getRight(),\n\t bottom = this.getBottom(),\n\t top = this.getTop(),\n\t left = this.getLeft();\n\t\n\t var symbolX = symbol.getCenter().x,\n\t symbolY = symbol.getCenter().y,\n\t symbolTop = symbol.getTop(),\n\t symbolRight = symbol.getRight(),\n\t symbolLeft = symbol.getLeft();\n\t\n\t var isOnSameColumn = x === symbolX,\n\t isOnSameLine = y === symbolY,\n\t isUnder = y < symbolY,\n\t isUpper = y > symbolY || this === symbol,\n\t isLeft = x > symbolX,\n\t isRight = x < symbolX;\n\t\n\t var maxX = 0,\n\t line,\n\t yOffset,\n\t lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t if (symbol.topLines.length === 0 && this.bottomLines.length === 0) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\n\t } else {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t line = drawLine(this.chart, bottom, [\n\t {x: symbolTop.x, y: symbolTop.y - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n\t if (symbol.leftLines.length === 0 && this.rightLines.length === 0) {\n\t line = drawLine(this.chart, right, symbolLeft, text);\n\t } else {\n\t yOffset = Math.max(symbol.leftLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x, y: right.y - yOffset},\n\t {x: right.x, y: symbolLeft.y - yOffset},\n\t {x: symbolLeft.x, y: symbolLeft.y - yOffset},\n\t {x: symbolLeft.x, y: symbolLeft.y}\n\t ], text);\n\t }\n\t this.rightLines.push(line);\n\t symbol.leftLines.push(line);\n\t this.rightStart = true;\n\t symbol.leftEnd = true;\n\t maxX = symbolLeft.x;\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n\t if (symbol.rightLines.length === 0 && this.leftLines.length === 0) {\n\t line = drawLine(this.chart, left, symbolRight, text);\n\t } else {\n\t yOffset = Math.max(symbol.rightLines.length, this.leftLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x, y: right.y - yOffset},\n\t {x: right.x, y: symbolRight.y - yOffset},\n\t {x: symbolRight.x, y: symbolRight.y - yOffset},\n\t {x: symbolRight.x, y: symbolRight.y}\n\t ], text);\n\t }\n\t this.leftLines.push(line);\n\t symbol.rightLines.push(line);\n\t this.leftStart = true;\n\t symbol.rightEnd = true;\n\t maxX = symbolRight.x;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n\t yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y - yOffset},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightLines.push(line);\n\t symbol.topLines.push(line);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n\t yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y - yOffset},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightLines.push(line);\n\t symbol.topLines.push(line);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2 - yOffset},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t } else {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((!origin || origin === 'bottom') && isRight && isUnder) {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t if (symbolTop.x > maxX) maxX = symbolTop.x;\n\t } else if ((!origin || origin === 'bottom') && isRight) {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2 - yOffset},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((origin && origin === 'right') && isLeft) {\n\t yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightLines.push(line);\n\t symbol.topLines.push(line);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'right') && isRight) {\n\t yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - yOffset}\n\t ], text);\n\t this.rightLines.push(line);\n\t symbol.topLines.push(line);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2 - yOffset},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + lineLength/2;\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n\t var diffX = left.x - lineLength/2;\n\t if (symbolLeft.x < left.x) {\n\t diffX = symbolLeft.x - lineLength/2;\n\t }\n\t yOffset = Math.max(symbol.topLines.length, this.leftLines.length) * 10;\n\t line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y - yOffset},\n\t {x: diffX, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftLines.push(line);\n\t symbol.topLines.push(line);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\n\t yOffset = Math.max(symbol.topLines.length, this.leftLines.length) * 10;\n\t line = drawLine(this.chart, left, [\n\t {x: symbolTop.x + (left.x - symbolTop.x)/2, y: left.y},\n\t {x: symbolTop.x + (left.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftLines.push(line);\n\t symbol.topLines.push(line);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'top')) {\n\t yOffset = Math.max(symbol.topLines.length, this.topLines.length) * 10;\n\t line = drawLine(this.chart, top, [\n\t {x: top.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.topLines.push(line);\n\t symbol.topLines.push(line);\n\t this.topStart = true;\n\t symbol.topEnd = true;\n\t maxX = top.x;\n\t }\n\t\n\t //update line style\n\t if (this.lineStyle[symbol.key] && line){\n\t line.attr(this.lineStyle[symbol.key]);\n\t }\n\t\n\t if (line) {\n\t for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n\t var otherLine = this.chart.lines[l];\n\t\n\t var ePath = otherLine.attr('path'),\n\t lPath = line.attr('path');\n\t\n\t for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n\t var newPath = [];\n\t newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n\t newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\t\n\t var line1_from_x = newPath[0][1];\n\t var line1_from_y = newPath[0][2];\n\t var line1_to_x = newPath[1][1];\n\t var line1_to_y = newPath[1][2];\n\t\n\t for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n\t var newLinePath = [];\n\t newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n\t newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\t\n\t var line2_from_x = newLinePath[0][1];\n\t var line2_from_y = newLinePath[0][2];\n\t var line2_to_x = newLinePath[1][1];\n\t var line2_to_y = newLinePath[1][2];\n\t\n\t var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n\t if (res.onLine1 && res.onLine2) {\n\t\n\t var newSegment;\n\t if (line2_from_y === line2_to_y) {\n\t if (line2_from_x > line2_to_x) {\n\t newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t } else {\n\t if (line2_from_y > line2_to_y) {\n\t newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t }\n\t\n\t lP += 2;\n\t }\n\t }\n\t }\n\t }\n\t\n\t this.chart.lines.push(line);\n\t if (this.chart.minXFromSymbols === undefined || this.chart.minXFromSymbols > left.x) {\n\t this.chart.minXFromSymbols = left.x;\n\t }\n\t }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ }),\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ (function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t var textAnchor = 'start';\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t if (from.x > firstTo.x) {\n\t x -= chart.options['text-margin']/2;\n\t textAnchor = 'end';\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t }\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t if (from.y > firstTo.y) {\n\t y -= chart.options['text-margin']*2;\n\t }\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': textAnchor,\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ }),\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 7);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 13);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 10);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 12);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 11);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 14);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\tvar Parallel = __webpack_require__(/*! ./flowchart.symbol.parallel */ 6);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s);\n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t case 'parallel':\n\t dispSymbols[s.key] = new Parallel(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else if (prevDisp instanceof(Parallel)) {\n\t if (prev.path1 === s) {\n\t prevDisp.path1(dispSymb);\n\t }\n\t if (prev.path2 === s) {\n\t prevDisp.path2(dispSymb);\n\t }\n\t if (prev.path3 === s) {\n\t prevDisp.path3(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (dispSymb instanceof(Parallel)) {\n\t if (s.path1) {\n\t constructChart(s.path1, dispSymb, s);\n\t }\n\t if (s.path2) {\n\t constructChart(s.path2, dispSymb, s);\n\t }\n\t if (s.path3) {\n\t constructChart(s.path3, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t },\n\t options: function() {\n\t return this.diagram.options;\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if (prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getStyle(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '{}';\n\t }\n\t\n\t function getSymbValue(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '';\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)];\n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t \n\t function getAnnotation(s) {\n\t\tvar startIndex = s.indexOf(\"(\") + 1, endIndex = s.indexOf(\")\");\n\t\tvar tmp = s.substring(startIndex, endIndex);\n\t\tif(tmp.indexOf(\",\") > 0) { tmp = tmp.substring(0, tmp.indexOf(\",\")); }\n\t\tvar tmp_split = tmp.split(\"@\");\n\t\tif(tmp_split.length > 1)\n\t\t\treturn startIndex >= 0 && endIndex >= 0 ? tmp_split[1] : \"\";\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0].trim();\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0].replace(/\\(.*\\)/, ''),\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null,\n\t function: null,\n\t lineStyle: {},\n\t params: {}\n\t };\n\t\n\t //parse parameters\n\t var params = parts[0].match(/\\((.*)\\)/);\n\t if (params && params.length > 1){\n\t var entries = params[1].split(',');\n\t for(var i = 0; i < entries.length; i++) {\n\t var entry = entries[i].split('=');\n\t if (entry.length == 2) {\n\t symbol.params[entry[0]] = entry[1];\n\t }\n\t }\n\t }\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':$') >= 0) {\n\t sub = symbol.text.split(':$');\n\t symbol.text = sub.shift();\n\t symbol.function = sub.join(':$');\n\t } else if (symbol.symbolType.indexOf(':$') >= 0) {\n\t sub = symbol.symbolType.split(':$');\n\t symbol.symbolType = sub.shift();\n\t symbol.function = sub.join(':$');\n\t } else if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t var ann = getAnnotation(line);\n\t if (ann) {\n\t line = line.replace('@' + ann, ''); \n\t }\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var iS = 0, lenS = flowSymbols.length; iS < lenS; iS++) {\n\t var flowSymb = flowSymbols[iS];\n\t var symbVal = getSymbValue(flowSymb);\n\t\n\t if (symbVal === 'true' || symbVal === 'false') {\n\t // map true or false to yes or no respectively\n\t flowSymb = flowSymb.replace('true', 'yes');\n\t flowSymb = flowSymb.replace('false', 'no');\n\t }\n\t \n\t var next = getNextPath(flowSymb);\n\t var realSymb = getSymbol(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (ann) {\n\t if (realSymb.symbolType === 'condition') {\n\t if (next === \"yes\" || next === \"true\") {\n\t realSymb.yes_annotation = ann;\n\t } else {\n\t realSymb.no_annotation = ann;\n\t }\n\t } else if (realSymb.symbolType === 'parallel') {\n\t if (next === 'path1') {\n\t realSymb.path1_annotation = ann;\n\t } else if (next === 'path2') {\n\t realSymb.path2_annotation = ann;\n\t } else if (next === 'path3') {\n\t realSymb.path3_annotation = ann;\n\t }\n\t }\n\t ann = null;\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (iS + 1 < lenS) {\n\t var nextSymb = flowSymbols[iS + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t } else if (line.indexOf('@>') >= 0) {\n\t\n\t // line style\n\t var lineStyleSymbols = line.split('@>');\n\t for (var iSS = 0, lenSS = lineStyleSymbols.length; iSS < lenSS; iSS++) {\n\t if ((iSS + 1) !== lenSS) {\n\t var curSymb = getSymbol(lineStyleSymbols[iSS]);\n\t var nextSymbol = getSymbol(lineStyleSymbols[iSS+1]);\n\t\n\t curSymb['lineStyle'][nextSymbol.key] = JSON.parse(getStyle(lineStyleSymbols[iSS + 1]));\n\t }\n\t }\n\t }\n\t\n\t }\n\t return chart;\n\t}\n\t\n\tmodule.exports = parse;\n\n\n/***/ }),\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction Condition(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.yes_annotation = options.yes_annotation;\n\t this.no_annotation = options.no_annotation;\n\t this.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = options.direction_yes;\n\t this.no_direction = options.direction_no;\n\t if (!this.no_direction && this.yes_direction === 'right') {\n\t this.no_direction = 'bottom';\n\t } else if (!this.yes_direction && this.no_direction === 'bottom') {\n\t this.yes_direction = 'right'\n\t }\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t this.symbol = symbol\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t var self = this;\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.right_symbol.symbolType === 'end') return;\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t \n\t if (this.left_symbol) {\n\t var leftPoint = this.getLeft();\n\t \n\t if (!this.left_symbol.isPositioned) {\n\t this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n\t this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t \n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t \n\t if (hasSymbolUnder) {\n\t if (self.left_symbol.symbolType === 'end') return;\n\t self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t \n\t this.left_symbol.isPositioned = true;\n\t \n\t this.left_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.yes_annotation ? this.yes_annotation : this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.no_annotation ? this.no_annotation : this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ }),\n/* 6 */\n/*!******************************************!*\\\n !*** ./src/flowchart.symbol.parallel.js ***!\n \\******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Parallel(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t this.path1_annotation = options.path1_annotation || '';\n\t this.path2_annotation = options.path2_annotation || '';\n\t this.path3_annotation = options.path3_annotation || '';\n\t this.textMargin = this.getAttr('text-margin');\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t this.params = options.params;\n\t if (options.direction_next === 'path1' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path2' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path3' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t\n\t if (options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path1 === 'right') {\n\t this.path2_direction = 'bottom';\n\t this.path1_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path1 === 'top') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'top';\n\t this.path3_direction = 'bottom';\n\t } else if (options.direction_path1 === 'left') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'left';\n\t this.path3_direction = 'bottom';\n\t } else {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'left';\n\t this.path3_direction = 'right';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'top';\n\t this.path3_direction = 'right';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'left';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else {\n\t this.path1_direction = options.direction_path1;\n\t this.path2_direction = options.direction_path2;\n\t this.path3_direction = options.direction_path3;\n\t }\n\t\n\t this.path1_direction = this.path1_direction || 'bottom';\n\t this.path2_direction = this.path2_direction || 'right';\n\t this.path3_direction = this.path3_direction || 'top';\n\t\n\t this.initialize();\n\t}\n\tinherits(Parallel, Symbol);\n\t\n\tParallel.prototype.render = function() {\n\t if (this.path1_direction) {\n\t this[this.path1_direction + '_symbol'] = this.path1_symbol;\n\t }\n\t\n\t if (this.path2_direction) {\n\t this[this.path2_direction + '_symbol'] = this.path2_symbol;\n\t }\n\t\n\t if (this.path3_direction) {\n\t this[this.path3_direction + '_symbol'] = this.path3_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.top_symbol) {\n\t var topPoint = this.getTop();\n\t\n\t if (!this.top_symbol.isPositioned) {\n\t this.top_symbol.shiftY(this.getY() - this.top_symbol.height - lineLength);\n\t this.top_symbol.setX(topPoint.x + this.top_symbol.width);\n\t this.top_symbol.isPositioned = true;\n\t\n\t this.top_symbol.render();\n\t }\n\t }\n\t\n\t var self = this;\n\t\n\t if (this.left_symbol) {\n\t var leftPoint = this.getLeft();\n\t\n\t if (!this.left_symbol.isPositioned) {\n\t this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n\t this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.left_symbol.symbolType === 'end') return;\n\t self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.left_symbol.isPositioned = true;\n\t\n\t this.left_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.right_symbol.symbolType === 'end') return;\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tParallel.prototype.renderLines = function() {\n\t if (this.path1_symbol) {\n\t this.drawLineTo(this.path1_symbol, this.path1_annotation, this.path1_direction);\n\t }\n\t\n\t if (this.path2_symbol) {\n\t this.drawLineTo(this.path2_symbol, this.path2_annotation, this.path2_direction);\n\t }\n\t\n\t if (this.path3_symbol) {\n\t this.drawLineTo(this.path3_symbol, this.path3_annotation, this.path3_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Parallel;\n\n/***/ }),\n/* 7 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 16);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 8);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\tvar Parallel = __webpack_require__(/*! ./flowchart.symbol.parallel */ 6);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if (symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else if (symbol instanceof(Parallel)) {\n\t symbol.path1 = function(nextSymbol) {\n\t symbol.path1_symbol = nextSymbol;\n\t if (symbol.path2_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.path2 = function(nextSymbol) {\n\t symbol.path2_symbol = nextSymbol;\n\t if (symbol.path3_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.path3 = function(nextSymbol) {\n\t symbol.path3_symbol = nextSymbol;\n\t if (symbol.path1_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t minX = 0,\n\t minY = 0,\n\t symbol,\n\t line;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t var x;\n\t var y;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t var leftX = symbol.getX()\n\t x = leftX + symbol.width;\n\t y = symbol.getY() + symbol.height;\n\t if (leftX < minX) {\n\t minX = leftX;\n\t }\n\t if (x > maxX) {\n\t maxX = x;\n\t }\n\t if (y > maxY) {\n\t maxY = y;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.lines.length; i < len; i++) {\n\t line = this.lines[i].getBBox();\n\t x = line.x;\n\t y = line.y;\n\t var x2 = line.x2;\n\t var y2 = line.y2;\n\t if (x < minX) {\n\t minX = x;\n\t }\n\t if (y < minY) {\n\t minY = y;\n\t }\n\t if (x2 > maxX) {\n\t maxX = x2;\n\t }\n\t if (y2 > maxY) {\n\t maxY = y2;\n\t }\n\t }\n\t\n\t var scale = this.options['scale'];\n\t var lineWidth = this.options['line-width'];\n\t\n\t if (this.minXFromSymbols < minX) minX = this.minXFromSymbols;\n\t\n\t if (minX < 0) minX -= lineWidth;\n\t if (minY < 0) minY -= lineWidth;\n\t\n\t var width = maxX + lineWidth - minX;\n\t var height = maxY + lineWidth - minY;\n\t\n\t this.paper.setSize(width * scale, height * scale);\n\t this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode && paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n/***/ }),\n/* 8 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ (function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t 'roundness': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {},\n\t 'parallel': {}\n\t } //,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n/***/ }),\n/* 9 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ (function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ }),\n/* 10 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ }),\n/* 11 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t this.symbol = symbol\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ }),\n/* 12 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ }),\n/* 13 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ }),\n/* 14 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ }),\n/* 15 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\n\t\t(function( $ ) {\n\t\t\tfunction paramFit(needle, haystack) {\n\t\t\t\treturn needle == haystack ||\n\t\t\t\t( Array.isArray(haystack) && (haystack.includes(needle) || haystack.includes(Number(needle)) ))\n\t\t\t}\n\t\t\tvar methods = {\n\t\t\t\tinit : function(options) {\n\t\t\t\t\treturn this.each(function() {\n\t\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\t\tthis.chart = parse($this.text());\n\t\t\t\t\t\t$this.html('');\n\t\t\t\t\t\tthis.chart.drawSVG(this, options);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tsetFlowStateByParam : function(param, paramValue, newFlowState) {\n\t\t\t\t\treturn this.each(function() {\n\t\t\t\t\t\tvar chart = this.chart;\n\t\n\t\t\t\t\t\t// @todo this should be part of Symbol API\n\t\t\t\t\t\tvar nextSymbolKeys = ['next', 'yes', 'no', 'path1', 'path2', 'path3'];\n\t\n\t\t\t\t\t\tfor (var property in chart.symbols) {\n\t\t\t\t\t\t\tif (chart.symbols.hasOwnProperty(property)) {\n\t\t\t\t\t\t\t\tvar symbol = chart.symbols[property];\n\t\t\t\t\t\t\t\tvar val = symbol.params[param];\n\t\t\t\t\t\t\t\tif (paramFit(val, paramValue)) {\n\t\t\t\t\t\t\t\t\tsymbol.flowstate = newFlowState;\n\t\t\t\t\t\t\t\t\tfor (var nski = 0; nski < nextSymbolKeys.length; nski++) {\n\t\t\t\t\t\t\t\t\t\tvar nextSymbolKey = nextSymbolKeys[nski];\n\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey] &&\n\t\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey]['params'] &&\n\t\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey]['params'][param] &&\n\t\t\t\t\t\t\t\t\t\t\tparamFit(symbol[nextSymbolKey]['params'][param], paramValue)\n\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\tsymbol.lineStyle[symbol[nextSymbolKey]['key']] = {stroke: chart.options()['flowstate'][newFlowState]['fill']};\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tchart.clean();\n\t\t\t\t\t\tchart.drawSVG(this);\n\t\t\t\t\t});\n\t\n\t\t\t\t},\n\t\t\t\tclearFlowState: function () {\n\t\t\t\t\treturn this.each(function() {\n\t\t\t\t\t\tvar chart = this.chart;\n\t\n\t\t\t\t\t\tfor (var property in chart.symbols) {\n\t\t\t\t\t\t\tif (chart.symbols.hasOwnProperty(property)) {\n\t\t\t\t\t\t\t\tvar node = chart.symbols[property];\n\t\t\t\t\t\t\t\tnode.flowstate = '';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tchart.clean();\n\t\t\t\t\t\tchart.drawSVG(this);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t\t$.fn.flowChart = function(methodOrOptions) {\n\t\t\t\tif ( methods[methodOrOptions] ) {\n\t\t\t\t\treturn methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 ));\n\t\t\t\t} else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ) {\n\t\t\t\t\t// Default to \"init\"\n\t\t\t\t\treturn methods.init.apply( this, arguments );\n\t\t\t\t} else {\n\t\t\t\t\t$.error( 'Method ' + methodOrOptions + ' does not exist on jQuery.flowChart' );\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ }),\n/* 16 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ (function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// flowchart.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 4f9d779180e36d518402","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./index.js\n// module id = 0\n// module chunks = 0","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.helpers.js\n// module id = 1\n// module chunks = 0","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n this.lineStyle = (options.lineStyle || {});\n this.key = (options.key || '');\n this.leftLines = [];\n this.rightLines = [];\n this.topLines = [];\n this.bottomLines = [];\n this.params = options.params;\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n \n //ndrqu Add click function with event and options params\n if (options.function) { \n this.text.attr({ 'cursor' : 'pointer' });\n\n this.text.node.addEventListener(\"click\", function(evt) {\n window[options.function](evt,options);\n }, false);\n }\n\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n symbol.node.setAttribute('ry', this.getAttr('roundness'));\n symbol.node.setAttribute('rx', this.getAttr('roundness'));\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n\n //ndrqu Add click function with event and options params\n if (options.function) { \n symbol.node.addEventListener(\"click\", function(evt) {\n window[options.function](evt,options);\n }, false);\n symbol.attr({ 'cursor' : 'pointer' });\n }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var self = this;\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n if (self.next.symbolType === 'end') return;\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else if (this.next_direction === 'left') {\n\n var leftPoint = this.getLeft();\n\n if (!this.next.isPositioned) {\n this.next.setY(leftPoint.y - this.next.height/2);\n this.next.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n if (self.next.symbolType === 'end') return;\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, this.getAttr('arrow-text') || '', this.next_direction);\n } else {\n this.drawLineTo(this.next, this.getAttr('arrow-text') || '');\n }\n }\n};\n\nSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n if (this.connectedTo.indexOf(symbol) < 0) {\n this.connectedTo.push(symbol);\n }\n\n var x = this.getCenter().x,\n y = this.getCenter().y,\n right = this.getRight(),\n bottom = this.getBottom(),\n top = this.getTop(),\n left = this.getLeft();\n\n var symbolX = symbol.getCenter().x,\n symbolY = symbol.getCenter().y,\n symbolTop = symbol.getTop(),\n symbolRight = symbol.getRight(),\n symbolLeft = symbol.getLeft();\n\n var isOnSameColumn = x === symbolX,\n isOnSameLine = y === symbolY,\n isUnder = y < symbolY,\n isUpper = y > symbolY || this === symbol,\n isLeft = x > symbolX,\n isRight = x < symbolX;\n\n var maxX = 0,\n line,\n yOffset,\n lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n if (symbol.topLines.length === 0 && this.bottomLines.length === 0) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n } else {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n line = drawLine(this.chart, bottom, [\n {x: symbolTop.x, y: symbolTop.y - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n if (symbol.leftLines.length === 0 && this.rightLines.length === 0) {\n line = drawLine(this.chart, right, symbolLeft, text);\n } else {\n yOffset = Math.max(symbol.leftLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x, y: right.y - yOffset},\n {x: right.x, y: symbolLeft.y - yOffset},\n {x: symbolLeft.x, y: symbolLeft.y - yOffset},\n {x: symbolLeft.x, y: symbolLeft.y}\n ], text);\n }\n this.rightLines.push(line);\n symbol.leftLines.push(line);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n if (symbol.rightLines.length === 0 && this.leftLines.length === 0) {\n line = drawLine(this.chart, left, symbolRight, text);\n } else {\n yOffset = Math.max(symbol.rightLines.length, this.leftLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x, y: right.y - yOffset},\n {x: right.x, y: symbolRight.y - yOffset},\n {x: symbolRight.x, y: symbolRight.y - yOffset},\n {x: symbolRight.x, y: symbolRight.y}\n ], text);\n }\n this.leftLines.push(line);\n symbol.rightLines.push(line);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y - yOffset},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightLines.push(line);\n symbol.topLines.push(line);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y - yOffset},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightLines.push(line);\n symbol.topLines.push(line);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2 - yOffset},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n } else {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((!origin || origin === 'bottom') && isRight && isUnder) {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n if (symbolTop.x > maxX) maxX = symbolTop.x;\n } else if ((!origin || origin === 'bottom') && isRight) {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2 - yOffset},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((origin && origin === 'right') && isLeft) {\n yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightLines.push(line);\n symbol.topLines.push(line);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y - yOffset},\n {x: symbolTop.x, y: symbolTop.y - yOffset}\n ], text);\n this.rightLines.push(line);\n symbol.topLines.push(line);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2 - yOffset},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + lineLength/2;\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n var diffX = left.x - lineLength/2;\n if (symbolLeft.x < left.x) {\n diffX = symbolLeft.x - lineLength/2;\n }\n yOffset = Math.max(symbol.topLines.length, this.leftLines.length) * 10;\n line = drawLine(this.chart, left, [\n {x: diffX, y: left.y - yOffset},\n {x: diffX, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftLines.push(line);\n symbol.topLines.push(line);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\n yOffset = Math.max(symbol.topLines.length, this.leftLines.length) * 10;\n line = drawLine(this.chart, left, [\n {x: symbolTop.x + (left.x - symbolTop.x)/2, y: left.y},\n {x: symbolTop.x + (left.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftLines.push(line);\n symbol.topLines.push(line);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'top')) {\n yOffset = Math.max(symbol.topLines.length, this.topLines.length) * 10;\n line = drawLine(this.chart, top, [\n {x: top.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.topLines.push(line);\n symbol.topLines.push(line);\n this.topStart = true;\n symbol.topEnd = true;\n maxX = top.x;\n }\n\n //update line style\n if (this.lineStyle[symbol.key] && line){\n line.attr(this.lineStyle[symbol.key]);\n }\n\n if (line) {\n for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n var otherLine = this.chart.lines[l];\n\n var ePath = otherLine.attr('path'),\n lPath = line.attr('path');\n\n for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n var newPath = [];\n newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\n var line1_from_x = newPath[0][1];\n var line1_from_y = newPath[0][2];\n var line1_to_x = newPath[1][1];\n var line1_to_y = newPath[1][2];\n\n for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n var newLinePath = [];\n newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\n var line2_from_x = newLinePath[0][1];\n var line2_from_y = newLinePath[0][2];\n var line2_to_x = newLinePath[1][1];\n var line2_to_y = newLinePath[1][2];\n\n var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n if (res.onLine1 && res.onLine2) {\n\n var newSegment;\n if (line2_from_y === line2_to_y) {\n if (line2_from_x > line2_to_x) {\n newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n } else {\n if (line2_from_y > line2_to_y) {\n newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n }\n\n lP += 2;\n }\n }\n }\n }\n\n this.chart.lines.push(line);\n if (this.chart.minXFromSymbols === undefined || this.chart.minXFromSymbols > left.x) {\n this.chart.minXFromSymbols = left.x;\n }\n }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.js\n// module id = 2\n// module chunks = 0","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n var textAnchor = 'start';\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n if (from.x > firstTo.x) {\n x -= chart.options['text-margin']/2;\n textAnchor = 'end';\n } else {\n x += chart.options['text-margin']/2;\n }\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n if (from.y > firstTo.y) {\n y -= chart.options['text-margin']*2;\n }\n }\n }\n\n textPath.attr({\n 'text-anchor': textAnchor,\n 'font-size': chart.options['font-size'],\n 'fill': chart.options['font-color'],\n x: x,\n y: y\n });\n\n if (font) textPath.attr({ 'font': font });\n if (fontF) textPath.attr({ 'font-family': fontF });\n if (fontW) textPath.attr({ 'font-weight': fontW });\n }\n\n return line;\n}\n\nfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n var denominator, a, b, numerator1, numerator2, result = {\n x: null,\n y: null,\n onLine1: false,\n onLine2: false\n };\n denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n if (denominator === 0) {\n return result;\n }\n a = line1StartY - line2StartY;\n b = line1StartX - line2StartX;\n numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n a = numerator1 / denominator;\n b = numerator2 / denominator;\n\n // if we cast these lines infinitely in both directions, they intersect here:\n result.x = line1StartX + (a * (line1EndX - line1StartX));\n result.y = line1StartY + (a * (line1EndY - line1StartY));\n /*\n // it is worth noting that this should be the same as:\n x = line2StartX + (b * (line2EndX - line2StartX));\n y = line2StartX + (b * (line2EndY - line2StartY));\n */\n // if line1 is a segment and line2 is infinite, they intersect if:\n if (a > 0 && a < 1) {\n result.onLine1 = true;\n }\n // if line2 is a segment and line1 is infinite, they intersect if:\n if (b > 0 && b < 1) {\n result.onLine2 = true;\n }\n // if line1 and line2 are segments, they intersect if both of the above are true\n return result;\n}\n\nmodule.exports = {\n\tdrawPath: drawPath,\n\tdrawLine: drawLine,\n\tcheckLineIntersection: checkLineIntersection\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.functions.js\n// module id = 3\n// module chunks = 0","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\nvar Parallel = require('./flowchart.symbol.parallel');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s);\n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n case 'parallel':\n dispSymbols[s.key] = new Parallel(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else if (prevDisp instanceof(Parallel)) {\n if (prev.path1 === s) {\n prevDisp.path1(dispSymb);\n }\n if (prev.path2 === s) {\n prevDisp.path2(dispSymb);\n }\n if (prev.path3 === s) {\n prevDisp.path3(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (dispSymb instanceof(Parallel)) {\n if (s.path1) {\n constructChart(s.path1, dispSymb, s);\n }\n if (s.path2) {\n constructChart(s.path2, dispSymb, s);\n }\n if (s.path3) {\n constructChart(s.path3, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n },\n options: function() {\n return this.diagram.options;\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if (prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getStyle(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '{}';\n }\n\n function getSymbValue(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '';\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)];\n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n \n function getAnnotation(s) {\n\tvar startIndex = s.indexOf(\"(\") + 1, endIndex = s.indexOf(\")\");\n\tvar tmp = s.substring(startIndex, endIndex);\n\tif(tmp.indexOf(\",\") > 0) { tmp = tmp.substring(0, tmp.indexOf(\",\")); }\n\tvar tmp_split = tmp.split(\"@\");\n\tif(tmp_split.length > 1)\n\t\treturn startIndex >= 0 && endIndex >= 0 ? tmp_split[1] : \"\";\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0].trim();\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0].replace(/\\(.*\\)/, ''),\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null,\n function: null,\n lineStyle: {},\n params: {}\n };\n\n //parse parameters\n var params = parts[0].match(/\\((.*)\\)/);\n if (params && params.length > 1){\n var entries = params[1].split(',');\n for(var i = 0; i < entries.length; i++) {\n var entry = entries[i].split('=');\n if (entry.length == 2) {\n symbol.params[entry[0]] = entry[1];\n }\n }\n }\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':$') >= 0) {\n sub = symbol.text.split(':$');\n symbol.text = sub.shift();\n symbol.function = sub.join(':$');\n } else if (symbol.symbolType.indexOf(':$') >= 0) {\n sub = symbol.symbolType.split(':$');\n symbol.symbolType = sub.shift();\n symbol.function = sub.join(':$');\n } else if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n var ann = getAnnotation(line);\n if (ann) {\n line = line.replace('@' + ann, ''); \n }\n // flow\n var flowSymbols = line.split('->');\n for (var iS = 0, lenS = flowSymbols.length; iS < lenS; iS++) {\n var flowSymb = flowSymbols[iS];\n var symbVal = getSymbValue(flowSymb);\n\n if (symbVal === 'true' || symbVal === 'false') {\n // map true or false to yes or no respectively\n flowSymb = flowSymb.replace('true', 'yes');\n flowSymb = flowSymb.replace('false', 'no');\n }\n \n var next = getNextPath(flowSymb);\n var realSymb = getSymbol(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (ann) {\n if (realSymb.symbolType === 'condition') {\n if (next === \"yes\" || next === \"true\") {\n realSymb.yes_annotation = ann;\n } else {\n realSymb.no_annotation = ann;\n }\n } else if (realSymb.symbolType === 'parallel') {\n if (next === 'path1') {\n realSymb.path1_annotation = ann;\n } else if (next === 'path2') {\n realSymb.path2_annotation = ann;\n } else if (next === 'path3') {\n realSymb.path3_annotation = ann;\n }\n }\n ann = null;\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (iS + 1 < lenS) {\n var nextSymb = flowSymbols[iS + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n } else if (line.indexOf('@>') >= 0) {\n\n // line style\n var lineStyleSymbols = line.split('@>');\n for (var iSS = 0, lenSS = lineStyleSymbols.length; iSS < lenSS; iSS++) {\n if ((iSS + 1) !== lenSS) {\n var curSymb = getSymbol(lineStyleSymbols[iSS]);\n var nextSymbol = getSymbol(lineStyleSymbols[iSS+1]);\n\n curSymb['lineStyle'][nextSymbol.key] = JSON.parse(getStyle(lineStyleSymbols[iSS + 1]));\n }\n }\n }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.parse.js\n// module id = 4\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.yes_annotation = options.yes_annotation;\n this.no_annotation = options.no_annotation;\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = options.direction_yes;\n this.no_direction = options.direction_no;\n if (!this.no_direction && this.yes_direction === 'right') {\n this.no_direction = 'bottom';\n } else if (!this.yes_direction && this.no_direction === 'bottom') {\n this.yes_direction = 'right'\n }\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n this.symbol = symbol\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n var self = this;\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n if (self.right_symbol.symbolType === 'end') return;\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n \n if (this.left_symbol) {\n var leftPoint = this.getLeft();\n \n if (!this.left_symbol.isPositioned) {\n this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n \n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n \n if (hasSymbolUnder) {\n if (self.left_symbol.symbolType === 'end') return;\n self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n \n this.left_symbol.isPositioned = true;\n \n this.left_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.yes_annotation ? this.yes_annotation : this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.no_annotation ? this.no_annotation : this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.condition.js\n// module id = 5\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Parallel(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n this.path1_annotation = options.path1_annotation || '';\n this.path2_annotation = options.path2_annotation || '';\n this.path3_annotation = options.path3_annotation || '';\n this.textMargin = this.getAttr('text-margin');\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'top';\n this.params = options.params;\n if (options.direction_next === 'path1' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n if (options.direction_next === 'path2' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n if (options.direction_next === 'path3' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n\n if (options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3) {\n if (options.direction_path1 === 'right') {\n this.path2_direction = 'bottom';\n this.path1_direction = 'right';\n this.path3_direction = 'top';\n } else if (options.direction_path1 === 'top') {\n this.path2_direction = 'right';\n this.path1_direction = 'top';\n this.path3_direction = 'bottom';\n } else if (options.direction_path1 === 'left') {\n this.path2_direction = 'right';\n this.path1_direction = 'left';\n this.path3_direction = 'bottom';\n } else {\n this.path2_direction = 'right';\n this.path1_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else if (options.path1 && !options.direction_path1 && options.path2 && options.direction_path2 && options.path3 && !options.direction_path3) {\n if (options.direction_path2 === 'right') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'top';\n } else if (options.direction_path2 === 'left') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'left';\n this.path3_direction = 'right';\n } else {\n this.path1_direction = 'right';\n this.path2_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else if (options.path1 && !options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && options.direction_path3) {\n if (options.direction_path2 === 'right') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'top';\n this.path3_direction = 'right';\n } else if (options.direction_path2 === 'left') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'left';\n } else {\n this.path1_direction = 'right';\n this.path2_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else {\n this.path1_direction = options.direction_path1;\n this.path2_direction = options.direction_path2;\n this.path3_direction = options.direction_path3;\n }\n\n this.path1_direction = this.path1_direction || 'bottom';\n this.path2_direction = this.path2_direction || 'right';\n this.path3_direction = this.path3_direction || 'top';\n\n this.initialize();\n}\ninherits(Parallel, Symbol);\n\nParallel.prototype.render = function() {\n if (this.path1_direction) {\n this[this.path1_direction + '_symbol'] = this.path1_symbol;\n }\n\n if (this.path2_direction) {\n this[this.path2_direction + '_symbol'] = this.path2_symbol;\n }\n\n if (this.path3_direction) {\n this[this.path3_direction + '_symbol'] = this.path3_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.top_symbol) {\n var topPoint = this.getTop();\n\n if (!this.top_symbol.isPositioned) {\n this.top_symbol.shiftY(this.getY() - this.top_symbol.height - lineLength);\n this.top_symbol.setX(topPoint.x + this.top_symbol.width);\n this.top_symbol.isPositioned = true;\n\n this.top_symbol.render();\n }\n }\n\n var self = this;\n\n if (this.left_symbol) {\n var leftPoint = this.getLeft();\n\n if (!this.left_symbol.isPositioned) {\n this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n if (self.left_symbol.symbolType === 'end') return;\n self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.left_symbol.isPositioned = true;\n\n this.left_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n if (self.right_symbol.symbolType === 'end') return;\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nParallel.prototype.renderLines = function() {\n if (this.path1_symbol) {\n this.drawLineTo(this.path1_symbol, this.path1_annotation, this.path1_direction);\n }\n\n if (this.path2_symbol) {\n this.drawLineTo(this.path2_symbol, this.path2_annotation, this.path2_direction);\n }\n\n if (this.path3_symbol) {\n this.drawLineTo(this.path3_symbol, this.path3_annotation, this.path3_direction);\n }\n};\n\nmodule.exports = Parallel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.parallel.js\n// module id = 6\n// module chunks = 0","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\nvar Parallel = require('./flowchart.symbol.parallel');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if (symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else if (symbol instanceof(Parallel)) {\n symbol.path1 = function(nextSymbol) {\n symbol.path1_symbol = nextSymbol;\n if (symbol.path2_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.path2 = function(nextSymbol) {\n symbol.path2_symbol = nextSymbol;\n if (symbol.path3_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.path3 = function(nextSymbol) {\n symbol.path3_symbol = nextSymbol;\n if (symbol.path1_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n minX = 0,\n minY = 0,\n symbol,\n line;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n var x;\n var y;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n var leftX = symbol.getX()\n x = leftX + symbol.width;\n y = symbol.getY() + symbol.height;\n if (leftX < minX) {\n minX = leftX;\n }\n if (x > maxX) {\n maxX = x;\n }\n if (y > maxY) {\n maxY = y;\n }\n }\n\n for (i = 0, len = this.lines.length; i < len; i++) {\n line = this.lines[i].getBBox();\n x = line.x;\n y = line.y;\n var x2 = line.x2;\n var y2 = line.y2;\n if (x < minX) {\n minX = x;\n }\n if (y < minY) {\n minY = y;\n }\n if (x2 > maxX) {\n maxX = x2;\n }\n if (y2 > maxY) {\n maxY = y2;\n }\n }\n\n var scale = this.options['scale'];\n var lineWidth = this.options['line-width'];\n\n if (this.minXFromSymbols < minX) minX = this.minXFromSymbols;\n\n if (minX < 0) minX -= lineWidth;\n if (minY < 0) minY -= lineWidth;\n\n var width = maxX + lineWidth - minX;\n var height = maxY + lineWidth - minY;\n\n this.paper.setSize(width * scale, height * scale);\n this.paper.setViewBox(minX, minY, width, height, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode && paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.chart.js\n// module id = 7\n// module chunks = 0","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n 'roundness': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {},\n 'parallel': {}\n } //,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.defaults.js\n// module id = 8\n// module chunks = 0","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.shim.js\n// module id = 9\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.end.js\n// module id = 10\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n this.symbol = symbol\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.inputoutput.js\n// module id = 11\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.operation.js\n// module id = 12\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.start.js\n// module id = 13\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.subroutine.js\n// module id = 14\n// module chunks = 0","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\n\t(function( $ ) {\n\t\tfunction paramFit(needle, haystack) {\n\t\t\treturn needle == haystack ||\n\t\t\t( Array.isArray(haystack) && (haystack.includes(needle) || haystack.includes(Number(needle)) ))\n\t\t}\n\t\tvar methods = {\n\t\t\tinit : function(options) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tthis.chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tthis.chart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t},\n\t\t\tsetFlowStateByParam : function(param, paramValue, newFlowState) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar chart = this.chart;\n\n\t\t\t\t\t// @todo this should be part of Symbol API\n\t\t\t\t\tvar nextSymbolKeys = ['next', 'yes', 'no', 'path1', 'path2', 'path3'];\n\n\t\t\t\t\tfor (var property in chart.symbols) {\n\t\t\t\t\t\tif (chart.symbols.hasOwnProperty(property)) {\n\t\t\t\t\t\t\tvar symbol = chart.symbols[property];\n\t\t\t\t\t\t\tvar val = symbol.params[param];\n\t\t\t\t\t\t\tif (paramFit(val, paramValue)) {\n\t\t\t\t\t\t\t\tsymbol.flowstate = newFlowState;\n\t\t\t\t\t\t\t\tfor (var nski = 0; nski < nextSymbolKeys.length; nski++) {\n\t\t\t\t\t\t\t\t\tvar nextSymbolKey = nextSymbolKeys[nski];\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey] &&\n\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey]['params'] &&\n\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey]['params'][param] &&\n\t\t\t\t\t\t\t\t\t\tparamFit(symbol[nextSymbolKey]['params'][param], paramValue)\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tsymbol.lineStyle[symbol[nextSymbolKey]['key']] = {stroke: chart.options()['flowstate'][newFlowState]['fill']};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tchart.clean();\n\t\t\t\t\tchart.drawSVG(this);\n\t\t\t\t});\n\n\t\t\t},\n\t\t\tclearFlowState: function () {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar chart = this.chart;\n\n\t\t\t\t\tfor (var property in chart.symbols) {\n\t\t\t\t\t\tif (chart.symbols.hasOwnProperty(property)) {\n\t\t\t\t\t\t\tvar node = chart.symbols[property];\n\t\t\t\t\t\t\tnode.flowstate = '';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tchart.clean();\n\t\t\t\t\tchart.drawSVG(this);\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\t$.fn.flowChart = function(methodOrOptions) {\n\t\t\tif ( methods[methodOrOptions] ) {\n\t\t\t\treturn methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 ));\n\t\t\t} else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ) {\n\t\t\t\t// Default to \"init\"\n\t\t\t\treturn methods.init.apply( this, arguments );\n\t\t\t} else {\n\t\t\t\t$.error( 'Method ' + methodOrOptions + ' does not exist on jQuery.flowChart' );\n\t\t\t}\n\t\t};\n\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/jquery-plugin.js\n// module id = 15\n// module chunks = 0","module.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"Raphael\"\n// module id = 16\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.min.js","webpack:///webpack/bootstrap 3903fb8ba547e7860dbb","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.symbol.parallel.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_16__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","lineStyle","key","leftLines","rightLines","topLines","bottomLines","params","next_direction","next","undefined","text","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","function","cursor","addEventListener","evt","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","roundness","isNaN","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","self","lineLength","rightPoint","isPositioned","shift","symb","hasSymbolUnder","len","diff","Math","abs","leftPoint","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","yOffset","right","bottom","top","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","max","rightStart","topEnd","bottomStart","diffX","leftStart","topStart","leftEnd","rightEnd","l","llen","lines","otherLine","ePath","lPath","iP","lenP","newPath","line1_from_x","line1_from_y","line1_to_x","line1_to_y","lP","lenlP","newLinePath","line2_from_x","line2_from_y","line2_to_x","line2_to_y","res","onLine1","onLine2","newSegment","splice","minXFromSymbols","maxXFromLine","drawPath","location","points","path","pathValues","from","to","toString","arrow-end","centerText","textPath","textAnchor","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getStyle","s","startIndex","endIndex","getSymbValue","getSymbol","getNextPath","flowSymb","getAnnotation","tmp","tmp_split","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Parallel","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","path1","path2","path3","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","parts","match","entries","entry","sub","join","txtAndState","pop","ann","flowSymbols","iS","lenS","symbVal","realSymb","direction","condOpt","yes_annotation","no_annotation","path1_annotation","path2_annotation","path3_annotation","nextSymb","lineStyleSymbols","iSS","lenSS","curSymb","nextSymbol","JSON","textMargin","yes_direction","direction_yes","no_direction","direction_no","startX","startY","yes_symbol","no_symbol","bottom_symbol","right_symbol","left_symbol","rect","path1_direction","path2_direction","path3_direction","direction_next","direction_path1","direction_path2","direction_path3","path1_symbol","path2_symbol","path3_symbol","top_symbol","topPoint","Raphael","handle","flowChart","maxHeight","maxY","minX","minY","leftX","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","parallel","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","innerWrap","jQuery","$","paramFit","needle","haystack","isArray","includes","methods","init","each","$this","html","setFlowStateByParam","param","paramValue","newFlowState","nextSymbolKeys","property","hasOwnProperty","val","nski","nextSymbolKey","clearFlowState","fn","methodOrOptions","apply","slice","error"],"mappings":"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","file":"flowchart.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_16__) {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_16__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n !*** ./index.js ***!\n \\******************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 9);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 15);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ }),\n/* 1 */\n/*!**********************************!*\\\n !*** ./src/flowchart.helpers.js ***!\n \\**********************************/\n/***/ (function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t if (!options || typeof options === 'function') {\n\t return defaultOptions;\n\t }\n\t\n\t var merged = {};\n\t for (var attrname in defaultOptions) {\n\t merged[attrname] = defaultOptions[attrname];\n\t }\n\t\n\t for (attrname in options) {\n\t if (options[attrname]) {\n\t if (typeof merged[attrname] === 'object') {\n\t merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t } else {\n\t merged[attrname] = options[attrname];\n\t }\n\t }\n\t }\n\t return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t if (typeof(Object.create) === 'function') {\n\t // implementation from standard node.js 'util' module\n\t ctor.super_ = superCtor;\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t } else {\n\t // old school shim for old browsers\n\t ctor.super_ = superCtor;\n\t var TempCtor = function () {};\n\t TempCtor.prototype = superCtor.prototype;\n\t ctor.prototype = new TempCtor();\n\t ctor.prototype.constructor = ctor;\n\t }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t defaults: _defaults,\n\t inherits: _inherits\n\t};\n\n\n/***/ }),\n/* 2 */\n/*!*********************************!*\\\n !*** ./src/flowchart.symbol.js ***!\n \\*********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t this.chart = chart;\n\t this.group = this.chart.paper.set();\n\t this.symbol = symbol;\n\t this.connectedTo = [];\n\t this.symbolType = options.symbolType;\n\t this.flowstate = (options.flowstate || 'future');\n\t this.lineStyle = (options.lineStyle || {});\n\t this.key = (options.key || '');\n\t this.leftLines = [];\n\t this.rightLines = [];\n\t this.topLines = [];\n\t this.bottomLines = [];\n\t this.params = options.params;\n\t\n\t this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t this.text = this.chart.paper.text(0, 0, options.text);\n\t //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t if (options.key) { this.text.node.id = options.key + 't'; }\n\t this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t this.text.attr({\n\t 'text-anchor': 'start',\n\t 'x' : this.getAttr('text-margin'),\n\t 'fill' : this.getAttr('font-color'),\n\t 'font-size' : this.getAttr('font-size')\n\t });\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) this.text.attr({ 'font': font });\n\t if (fontF) this.text.attr({ 'font-family': fontF });\n\t if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { this.text.attr('href', options.link); }\n\t \n\t //ndrqu Add click function with event and options params\n\t if (options.function) { \n\t this.text.attr({ 'cursor' : 'pointer' });\n\t\n\t this.text.node.addEventListener(\"click\", function(evt) {\n\t window[options.function](evt,options);\n\t }, false);\n\t }\n\t\n\t if (options.target) { this.text.attr('target', options.target); }\n\t\n\t var maxWidth = this.getAttr('maxWidth');\n\t if (maxWidth) {\n\t // using this approach: http://stackoverflow.com/a/3153457/22466\n\t var words = options.text.split(' ');\n\t var tempText = \"\";\n\t for (var i=0, ii=words.length; i maxWidth) {\n\t tempText += \"\\n\" + word;\n\t } else {\n\t tempText += \" \" + word;\n\t }\n\t }\n\t this.text.attr(\"text\", tempText.substring(1));\n\t }\n\t\n\t this.group.push(this.text);\n\t\n\t if (symbol) {\n\t var tmpMargin = this.getAttr('text-margin');\n\t\n\t symbol.attr({\n\t 'fill' : this.getAttr('fill'),\n\t 'stroke' : this.getAttr('element-color'),\n\t 'stroke-width' : this.getAttr('line-width'),\n\t 'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t 'height' : this.text.getBBox().height + 2 * tmpMargin\n\t });\n\t\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t var roundness = this.getAttr('roundness');\n\t if (!isNaN(roundness)) {\n\t symbol.node.setAttribute('ry', roundness);\n\t symbol.node.setAttribute('rx', roundness);\n\t }\n\t\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t\n\t //ndrqu Add click function with event and options params\n\t if (options.function) { \n\t symbol.node.addEventListener(\"click\", function(evt) {\n\t window[options.function](evt,options);\n\t }, false);\n\t symbol.attr({ 'cursor' : 'pointer' });\n\t }\n\t if (options.key) { symbol.node.id = options.key; }\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t\n\t this.text.attr({\n\t 'y': symbol.getBBox().height/2\n\t });\n\t\n\t this.initialize();\n\t }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t if (!this.chart) {\n\t return undefined;\n\t }\n\t var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t var opt1;\n\t if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t }\n\t return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t this.width = this.group.getBBox().width;\n\t this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t return {x: this.getX() + this.width/2,\n\t y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t var y = this.getY();\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t var y = this.getY() + this.height;\n\t var x = this.getX() + this.width/2;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX();\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width;\n\t return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t if (this.next) {\n\t\n\t var self = this;\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.next_direction === 'right') {\n\t\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.setY(rightPoint.y - this.next.height/2);\n\t this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.next.symbolType === 'end') return;\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else if (this.next_direction === 'left') {\n\t\n\t var leftPoint = this.getLeft();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.setY(leftPoint.y - this.next.height/2);\n\t this.next.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.next.symbolType === 'end') return;\n\t self.next.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t } else {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.next.isPositioned) {\n\t this.next.shiftY(this.getY() + this.height + lineLength);\n\t this.next.setX(bottomPoint.x - this.next.width/2);\n\t this.next.isPositioned = true;\n\t\n\t this.next.render();\n\t }\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t if (this.next) {\n\t if (this.next_direction) {\n\t this.drawLineTo(this.next, this.getAttr('arrow-text') || '', this.next_direction);\n\t } else {\n\t this.drawLineTo(this.next, this.getAttr('arrow-text') || '');\n\t }\n\t }\n\t};\n\t\n\tSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n\t if (this.connectedTo.indexOf(symbol) < 0) {\n\t this.connectedTo.push(symbol);\n\t }\n\t\n\t var x = this.getCenter().x,\n\t y = this.getCenter().y,\n\t right = this.getRight(),\n\t bottom = this.getBottom(),\n\t top = this.getTop(),\n\t left = this.getLeft();\n\t\n\t var symbolX = symbol.getCenter().x,\n\t symbolY = symbol.getCenter().y,\n\t symbolTop = symbol.getTop(),\n\t symbolRight = symbol.getRight(),\n\t symbolLeft = symbol.getLeft();\n\t\n\t var isOnSameColumn = x === symbolX,\n\t isOnSameLine = y === symbolY,\n\t isUnder = y < symbolY,\n\t isUpper = y > symbolY || this === symbol,\n\t isLeft = x > symbolX,\n\t isRight = x < symbolX;\n\t\n\t var maxX = 0,\n\t line,\n\t yOffset,\n\t lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t if (symbol.topLines.length === 0 && this.bottomLines.length === 0) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\n\t } else {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t line = drawLine(this.chart, bottom, [\n\t {x: symbolTop.x, y: symbolTop.y - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n\t if (symbol.leftLines.length === 0 && this.rightLines.length === 0) {\n\t line = drawLine(this.chart, right, symbolLeft, text);\n\t } else {\n\t yOffset = Math.max(symbol.leftLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x, y: right.y - yOffset},\n\t {x: right.x, y: symbolLeft.y - yOffset},\n\t {x: symbolLeft.x, y: symbolLeft.y - yOffset},\n\t {x: symbolLeft.x, y: symbolLeft.y}\n\t ], text);\n\t }\n\t this.rightLines.push(line);\n\t symbol.leftLines.push(line);\n\t this.rightStart = true;\n\t symbol.leftEnd = true;\n\t maxX = symbolLeft.x;\n\t } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n\t if (symbol.rightLines.length === 0 && this.leftLines.length === 0) {\n\t line = drawLine(this.chart, left, symbolRight, text);\n\t } else {\n\t yOffset = Math.max(symbol.rightLines.length, this.leftLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x, y: right.y - yOffset},\n\t {x: right.x, y: symbolRight.y - yOffset},\n\t {x: symbolRight.x, y: symbolRight.y - yOffset},\n\t {x: symbolRight.x, y: symbolRight.y}\n\t ], text);\n\t }\n\t this.leftLines.push(line);\n\t symbol.rightLines.push(line);\n\t this.leftStart = true;\n\t symbol.rightEnd = true;\n\t maxX = symbolRight.x;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n\t yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y - yOffset},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightLines.push(line);\n\t symbol.topLines.push(line);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n\t yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y - yOffset},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightLines.push(line);\n\t symbol.topLines.push(line);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((!origin || origin === 'bottom') && isLeft) {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2 - yOffset},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t } else {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((!origin || origin === 'bottom') && isRight && isUnder) {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x;\n\t if (symbolTop.x > maxX) maxX = symbolTop.x;\n\t } else if ((!origin || origin === 'bottom') && isRight) {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2 - yOffset},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t } else if ((origin && origin === 'right') && isLeft) {\n\t yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: right.x + lineLength/2, y: right.y},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.rightLines.push(line);\n\t symbol.topLines.push(line);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'right') && isRight) {\n\t yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n\t line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - yOffset}\n\t ], text);\n\t this.rightLines.push(line);\n\t symbol.topLines.push(line);\n\t this.rightStart = true;\n\t symbol.topEnd = true;\n\t maxX = right.x + lineLength/2;\n\t } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n\t yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2 - yOffset},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.bottomLines.push(line);\n\t symbol.topLines.push(line);\n\t this.bottomStart = true;\n\t symbol.topEnd = true;\n\t maxX = bottom.x + lineLength/2;\n\t } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n\t var diffX = left.x - lineLength/2;\n\t if (symbolLeft.x < left.x) {\n\t diffX = symbolLeft.x - lineLength/2;\n\t }\n\t yOffset = Math.max(symbol.topLines.length, this.leftLines.length) * 10;\n\t line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y - yOffset},\n\t {x: diffX, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftLines.push(line);\n\t symbol.topLines.push(line);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\n\t yOffset = Math.max(symbol.topLines.length, this.leftLines.length) * 10;\n\t line = drawLine(this.chart, left, [\n\t {x: symbolTop.x + (left.x - symbolTop.x)/2, y: left.y},\n\t {x: symbolTop.x + (left.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftLines.push(line);\n\t symbol.topLines.push(line);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'top')) {\n\t yOffset = Math.max(symbol.topLines.length, this.topLines.length) * 10;\n\t line = drawLine(this.chart, top, [\n\t {x: top.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.topLines.push(line);\n\t symbol.topLines.push(line);\n\t this.topStart = true;\n\t symbol.topEnd = true;\n\t maxX = top.x;\n\t }\n\t\n\t //update line style\n\t if (this.lineStyle[symbol.key] && line){\n\t line.attr(this.lineStyle[symbol.key]);\n\t }\n\t\n\t if (line) {\n\t for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n\t var otherLine = this.chart.lines[l];\n\t\n\t var ePath = otherLine.attr('path'),\n\t lPath = line.attr('path');\n\t\n\t for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n\t var newPath = [];\n\t newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n\t newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\t\n\t var line1_from_x = newPath[0][1];\n\t var line1_from_y = newPath[0][2];\n\t var line1_to_x = newPath[1][1];\n\t var line1_to_y = newPath[1][2];\n\t\n\t for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n\t var newLinePath = [];\n\t newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n\t newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\t\n\t var line2_from_x = newLinePath[0][1];\n\t var line2_from_y = newLinePath[0][2];\n\t var line2_to_x = newLinePath[1][1];\n\t var line2_to_y = newLinePath[1][2];\n\t\n\t var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n\t if (res.onLine1 && res.onLine2) {\n\t\n\t var newSegment;\n\t if (line2_from_y === line2_to_y) {\n\t if (line2_from_x > line2_to_x) {\n\t newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t } else {\n\t if (line2_from_y > line2_to_y) {\n\t newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t } else {\n\t newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n\t lPath.splice(lP + 1, 0, newSegment);\n\t newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n\t lPath.splice(lP + 2, 0, newSegment);\n\t line.attr('path', lPath);\n\t }\n\t }\n\t\n\t lP += 2;\n\t }\n\t }\n\t }\n\t }\n\t\n\t this.chart.lines.push(line);\n\t if (this.chart.minXFromSymbols === undefined || this.chart.minXFromSymbols > left.x) {\n\t this.chart.minXFromSymbols = left.x;\n\t }\n\t }\n\t\n\t if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t this.chart.maxXFromLine = maxX;\n\t }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ }),\n/* 3 */\n/*!************************************!*\\\n !*** ./src/flowchart.functions.js ***!\n \\************************************/\n/***/ (function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t var i, len;\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [location.x, location.y];\n\t for (i = 0, len = points.length; i < len; i++) {\n\t pathValues.push(points[i].x);\n\t pathValues.push(points[i].y);\n\t }\n\t var symbol = chart.paper.path(path, pathValues);\n\t symbol.attr('stroke', chart.options['element-color']);\n\t symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) symbol.attr({ 'font': font });\n\t if (fontF) symbol.attr({ 'font-family': fontF });\n\t if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t var i, len;\n\t\n\t if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t to = [to];\n\t }\n\t\n\t var path = 'M{0},{1}';\n\t for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t path += ' L{' + i + '},{' + (i + 1) + '}';\n\t }\n\t var pathValues = [from.x, from.y];\n\t for (i = 0, len = to.length; i < len; i++) {\n\t pathValues.push(to[i].x);\n\t pathValues.push(to[i].y);\n\t }\n\t\n\t var line = chart.paper.path(path, pathValues);\n\t line.attr({\n\t stroke: chart.options['line-color'],\n\t 'stroke-width': chart.options['line-width'],\n\t 'arrow-end': chart.options['arrow-end']\n\t });\n\t\n\t var font = chart.options.font;\n\t var fontF = chart.options['font-family'];\n\t var fontW = chart.options['font-weight'];\n\t\n\t if (font) line.attr({ 'font': font });\n\t if (fontF) line.attr({ 'font-family': fontF });\n\t if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t if (text) {\n\t\n\t var centerText = false;\n\t\n\t var textPath = chart.paper.text(0, 0, text);\n\t var textAnchor = 'start';\n\t\n\t var isHorizontal = false;\n\t var firstTo = to[0];\n\t\n\t if (from.y === firstTo.y) {\n\t isHorizontal = true;\n\t }\n\t\n\t var x = 0,\n\t y = 0;\n\t\n\t if (centerText) {\n\t if (from.x > firstTo.x) {\n\t x = from.x - (from.x - firstTo.x)/2;\n\t } else {\n\t x = firstTo.x - (firstTo.x - from.x)/2;\n\t }\n\t\n\t if (from.y > firstTo.y) {\n\t y = from.y - (from.y - firstTo.y)/2;\n\t } else {\n\t y = firstTo.y - (firstTo.y - from.y)/2;\n\t }\n\t\n\t if (isHorizontal) {\n\t x -= textPath.getBBox().width/2;\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin'];\n\t y -= textPath.getBBox().height/2;\n\t }\n\t } else {\n\t x = from.x;\n\t y = from.y;\n\t\n\t if (isHorizontal) {\n\t if (from.x > firstTo.x) {\n\t x -= chart.options['text-margin']/2;\n\t textAnchor = 'end';\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t }\n\t y -= chart.options['text-margin'];\n\t } else {\n\t x += chart.options['text-margin']/2;\n\t y += chart.options['text-margin'];\n\t if (from.y > firstTo.y) {\n\t y -= chart.options['text-margin']*2;\n\t }\n\t }\n\t }\n\t\n\t textPath.attr({\n\t 'text-anchor': textAnchor,\n\t 'font-size': chart.options['font-size'],\n\t 'fill': chart.options['font-color'],\n\t x: x,\n\t y: y\n\t });\n\t\n\t if (font) textPath.attr({ 'font': font });\n\t if (fontF) textPath.attr({ 'font-family': fontF });\n\t if (fontW) textPath.attr({ 'font-weight': fontW });\n\t }\n\t\n\t return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t var denominator, a, b, numerator1, numerator2, result = {\n\t x: null,\n\t y: null,\n\t onLine1: false,\n\t onLine2: false\n\t };\n\t denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t if (denominator === 0) {\n\t return result;\n\t }\n\t a = line1StartY - line2StartY;\n\t b = line1StartX - line2StartX;\n\t numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t a = numerator1 / denominator;\n\t b = numerator2 / denominator;\n\t\n\t // if we cast these lines infinitely in both directions, they intersect here:\n\t result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t /*\n\t // it is worth noting that this should be the same as:\n\t x = line2StartX + (b * (line2EndX - line2StartX));\n\t y = line2StartX + (b * (line2EndY - line2StartY));\n\t */\n\t // if line1 is a segment and line2 is infinite, they intersect if:\n\t if (a > 0 && a < 1) {\n\t result.onLine1 = true;\n\t }\n\t // if line2 is a segment and line1 is infinite, they intersect if:\n\t if (b > 0 && b < 1) {\n\t result.onLine2 = true;\n\t }\n\t // if line1 and line2 are segments, they intersect if both of the above are true\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ }),\n/* 4 */\n/*!********************************!*\\\n !*** ./src/flowchart.parse.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 7);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 13);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 10);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 12);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 11);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 14);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\tvar Parallel = __webpack_require__(/*! ./flowchart.symbol.parallel */ 6);\n\t\n\tfunction parse(input) {\n\t input = input || '';\n\t input = input.trim();\n\t\n\t var chart = {\n\t symbols: {},\n\t start: null,\n\t drawSVG: function(container, options) {\n\t var self = this;\n\t\n\t if (this.diagram) {\n\t this.diagram.clean();\n\t }\n\t\n\t var diagram = new FlowChart(container, options);\n\t this.diagram = diagram;\n\t var dispSymbols = {};\n\t\n\t function getDisplaySymbol(s) {\n\t if (dispSymbols[s.key]) {\n\t return dispSymbols[s.key];\n\t }\n\t\n\t switch (s.symbolType) {\n\t case 'start':\n\t dispSymbols[s.key] = new Start(diagram, s);\n\t break;\n\t case 'end':\n\t dispSymbols[s.key] = new End(diagram, s);\n\t break;\n\t case 'operation':\n\t dispSymbols[s.key] = new Operation(diagram, s);\n\t break;\n\t case 'inputoutput':\n\t dispSymbols[s.key] = new InputOutput(diagram, s);\n\t break;\n\t case 'subroutine':\n\t dispSymbols[s.key] = new Subroutine(diagram, s);\n\t break;\n\t case 'condition':\n\t dispSymbols[s.key] = new Condition(diagram, s);\n\t break;\n\t case 'parallel':\n\t dispSymbols[s.key] = new Parallel(diagram, s);\n\t break;\n\t default:\n\t return new Error('Wrong symbol type!');\n\t }\n\t\n\t return dispSymbols[s.key];\n\t }\n\t\n\t (function constructChart(s, prevDisp, prev) {\n\t var dispSymb = getDisplaySymbol(s);\n\t\n\t if (self.start === s) {\n\t diagram.startWith(dispSymb);\n\t } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t if (prevDisp instanceof(Condition)) {\n\t if (prev.yes === s) {\n\t prevDisp.yes(dispSymb);\n\t }\n\t if (prev.no === s) {\n\t prevDisp.no(dispSymb);\n\t }\n\t } else if (prevDisp instanceof(Parallel)) {\n\t if (prev.path1 === s) {\n\t prevDisp.path1(dispSymb);\n\t }\n\t if (prev.path2 === s) {\n\t prevDisp.path2(dispSymb);\n\t }\n\t if (prev.path3 === s) {\n\t prevDisp.path3(dispSymb);\n\t }\n\t } else {\n\t prevDisp.then(dispSymb);\n\t }\n\t }\n\t\n\t if (dispSymb.pathOk) {\n\t return dispSymb;\n\t }\n\t\n\t if (dispSymb instanceof(Condition)) {\n\t if (s.yes) {\n\t constructChart(s.yes, dispSymb, s);\n\t }\n\t if (s.no) {\n\t constructChart(s.no, dispSymb, s);\n\t }\n\t } else if (dispSymb instanceof(Parallel)) {\n\t if (s.path1) {\n\t constructChart(s.path1, dispSymb, s);\n\t }\n\t if (s.path2) {\n\t constructChart(s.path2, dispSymb, s);\n\t }\n\t if (s.path3) {\n\t constructChart(s.path3, dispSymb, s);\n\t }\n\t } else if (s.next) {\n\t constructChart(s.next, dispSymb, s);\n\t }\n\t\n\t return dispSymb;\n\t })(this.start);\n\t\n\t diagram.render();\n\t },\n\t clean: function() {\n\t this.diagram.clean();\n\t },\n\t options: function() {\n\t return this.diagram.options;\n\t }\n\t };\n\t\n\t var lines = [];\n\t var prevBreak = 0;\n\t for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t var line0 = input.substring(prevBreak, i0);\n\t prevBreak = i0 + 1;\n\t lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t }\n\t }\n\t\n\t if (prevBreak < input.length) {\n\t lines.push(input.substr(prevBreak));\n\t }\n\t\n\t for (var l = 1, len = lines.length; l < len;) {\n\t var currentLine = lines[l];\n\t\n\t if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n\t lines[l - 1] += '\\n' + currentLine;\n\t lines.splice(l, 1);\n\t len--;\n\t } else {\n\t l++;\n\t }\n\t }\n\t\n\t function getStyle(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '{}';\n\t }\n\t\n\t function getSymbValue(s){\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return s.substring(startIndex,endIndex);\n\t }\n\t return '';\n\t }\n\t\n\t function getSymbol(s) {\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t return chart.symbols[s.substring(0, startIndex - 1)];\n\t }\n\t return chart.symbols[s];\n\t }\n\t\n\t function getNextPath(s) {\n\t var next = 'next';\n\t var startIndex = s.indexOf('(') + 1;\n\t var endIndex = s.indexOf(')');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t next = flowSymb.substring(startIndex, endIndex);\n\t if (next.indexOf(',') < 0) {\n\t if (next !== 'yes' && next !== 'no') {\n\t next = 'next, ' + next;\n\t }\n\t }\n\t }\n\t return next;\n\t }\n\t \n\t function getAnnotation(s) {\n\t\tvar startIndex = s.indexOf(\"(\") + 1, endIndex = s.indexOf(\")\");\n\t\tvar tmp = s.substring(startIndex, endIndex);\n\t\tif(tmp.indexOf(\",\") > 0) { tmp = tmp.substring(0, tmp.indexOf(\",\")); }\n\t\tvar tmp_split = tmp.split(\"@\");\n\t\tif(tmp_split.length > 1)\n\t\t\treturn startIndex >= 0 && endIndex >= 0 ? tmp_split[1] : \"\";\n\t }\n\t\n\t while (lines.length > 0) {\n\t var line = lines.splice(0, 1)[0].trim();\n\t\n\t if (line.indexOf('=>') >= 0) {\n\t // definition\n\t var parts = line.split('=>');\n\t var symbol = {\n\t key: parts[0].replace(/\\(.*\\)/, ''),\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null,\n\t function: null,\n\t lineStyle: {},\n\t params: {}\n\t };\n\t\n\t //parse parameters\n\t var params = parts[0].match(/\\((.*)\\)/);\n\t if (params && params.length > 1){\n\t var entries = params[1].split(',');\n\t for(var i = 0; i < entries.length; i++) {\n\t var entry = entries[i].split('=');\n\t if (entry.length == 2) {\n\t symbol.params[entry[0]] = entry[1];\n\t }\n\t }\n\t }\n\t\n\t var sub;\n\t\n\t if (symbol.symbolType.indexOf(': ') >= 0) {\n\t sub = symbol.symbolType.split(': ');\n\t symbol.symbolType = sub.shift();\n\t symbol.text = sub.join(': ');\n\t }\n\t\n\t if (symbol.text && symbol.text.indexOf(':$') >= 0) {\n\t sub = symbol.text.split(':$');\n\t symbol.text = sub.shift();\n\t symbol.function = sub.join(':$');\n\t } else if (symbol.symbolType.indexOf(':$') >= 0) {\n\t sub = symbol.symbolType.split(':$');\n\t symbol.symbolType = sub.shift();\n\t symbol.function = sub.join(':$');\n\t } else if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t sub = symbol.text.split(':>');\n\t symbol.text = sub.shift();\n\t symbol.link = sub.join(':>');\n\t } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t sub = symbol.symbolType.split(':>');\n\t symbol.symbolType = sub.shift();\n\t symbol.link = sub.join(':>');\n\t }\n\t\n\t if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t }\n\t\n\t /* adding support for links */\n\t if (symbol.link) {\n\t var startIndex = symbol.link.indexOf('[') + 1;\n\t var endIndex = symbol.link.indexOf(']');\n\t if (startIndex >= 0 && endIndex >= 0) {\n\t symbol.target = symbol.link.substring(startIndex, endIndex);\n\t symbol.link = symbol.link.substring(0, startIndex - 1);\n\t }\n\t }\n\t /* end of link support */\n\t\n\t /* adding support for flowstates */\n\t if (symbol.text) {\n\t if (symbol.text.indexOf('|') >= 0) {\n\t var txtAndState = symbol.text.split('|');\n\t symbol.flowstate = txtAndState.pop().trim();\n\t symbol.text = txtAndState.join('|');\n\t }\n\t }\n\t /* end of flowstate support */\n\t\n\t chart.symbols[symbol.key] = symbol;\n\t\n\t } else if (line.indexOf('->') >= 0) {\n\t var ann = getAnnotation(line);\n\t if (ann) {\n\t line = line.replace('@' + ann, ''); \n\t }\n\t // flow\n\t var flowSymbols = line.split('->');\n\t for (var iS = 0, lenS = flowSymbols.length; iS < lenS; iS++) {\n\t var flowSymb = flowSymbols[iS];\n\t var symbVal = getSymbValue(flowSymb);\n\t\n\t if (symbVal === 'true' || symbVal === 'false') {\n\t // map true or false to yes or no respectively\n\t flowSymb = flowSymb.replace('true', 'yes');\n\t flowSymb = flowSymb.replace('false', 'no');\n\t }\n\t \n\t var next = getNextPath(flowSymb);\n\t var realSymb = getSymbol(flowSymb);\n\t\n\t var direction = null;\n\t if (next.indexOf(',') >= 0) {\n\t var condOpt = next.split(',');\n\t next = condOpt[0];\n\t direction = condOpt[1].trim();\n\t }\n\t\n\t if (ann) {\n\t if (realSymb.symbolType === 'condition') {\n\t if (next === \"yes\" || next === \"true\") {\n\t realSymb.yes_annotation = ann;\n\t } else {\n\t realSymb.no_annotation = ann;\n\t }\n\t } else if (realSymb.symbolType === 'parallel') {\n\t if (next === 'path1') {\n\t realSymb.path1_annotation = ann;\n\t } else if (next === 'path2') {\n\t realSymb.path2_annotation = ann;\n\t } else if (next === 'path3') {\n\t realSymb.path3_annotation = ann;\n\t }\n\t }\n\t ann = null;\n\t }\n\t\n\t if (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (iS + 1 < lenS) {\n\t var nextSymb = flowSymbols[iS + 1];\n\t realSymb[next] = getSymbol(nextSymb);\n\t realSymb['direction_' + next] = direction;\n\t direction = null;\n\t }\n\t }\n\t } else if (line.indexOf('@>') >= 0) {\n\t\n\t // line style\n\t var lineStyleSymbols = line.split('@>');\n\t for (var iSS = 0, lenSS = lineStyleSymbols.length; iSS < lenSS; iSS++) {\n\t if ((iSS + 1) !== lenSS) {\n\t var curSymb = getSymbol(lineStyleSymbols[iSS]);\n\t var nextSymbol = getSymbol(lineStyleSymbols[iSS+1]);\n\t\n\t curSymb['lineStyle'][nextSymbol.key] = JSON.parse(getStyle(lineStyleSymbols[iSS + 1]));\n\t }\n\t }\n\t }\n\t\n\t }\n\t return chart;\n\t}\n\t\n\tmodule.exports = parse;\n\n\n/***/ }),\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction Condition(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.yes_annotation = options.yes_annotation;\n\t this.no_annotation = options.no_annotation;\n\t this.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = options.direction_yes;\n\t this.no_direction = options.direction_no;\n\t if (!this.no_direction && this.yes_direction === 'right') {\n\t this.no_direction = 'bottom';\n\t } else if (!this.yes_direction && this.no_direction === 'bottom') {\n\t this.yes_direction = 'right'\n\t }\n\t this.yes_direction = this.yes_direction || 'bottom';\n\t this.no_direction = this.no_direction || 'right';\n\t\n\t this.text.attr({\n\t x: this.textMargin * 2\n\t });\n\t\n\t var width = this.text.getBBox().width + 3 * this.textMargin;\n\t width += width/2;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t height += height/2;\n\t height = Math.max(width * 0.5, height);\n\t var startX = width/4;\n\t var startY = height/4;\n\t\n\t this.text.attr({\n\t x: startX + this.textMargin/2\n\t });\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - width/4, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t {x: startX - width/4 + width, y: startY + height/4},\n\t {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t {x: startX - width/4, y: startY + height/4}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t this.symbol = symbol\n\t\n\t this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t var self = this;\n\t if (this.yes_direction) {\n\t this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t }\n\t\n\t if (this.no_direction) {\n\t this[this.no_direction + '_symbol'] = this.no_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.right_symbol.symbolType === 'end') return;\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t \n\t if (this.left_symbol) {\n\t var leftPoint = this.getLeft();\n\t \n\t if (!this.left_symbol.isPositioned) {\n\t this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n\t this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t \n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t \n\t if (hasSymbolUnder) {\n\t if (self.left_symbol.symbolType === 'end') return;\n\t self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t \n\t this.left_symbol.isPositioned = true;\n\t \n\t this.left_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, this.yes_annotation ? this.yes_annotation : this.getAttr('yes-text'), this.yes_direction);\n\t }\n\t\n\t if (this.no_symbol) {\n\t this.drawLineTo(this.no_symbol, this.no_annotation ? this.no_annotation : this.getAttr('no-text'), this.no_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ }),\n/* 6 */\n/*!******************************************!*\\\n !*** ./src/flowchart.symbol.parallel.js ***!\n \\******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Parallel(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t this.path1_annotation = options.path1_annotation || '';\n\t this.path2_annotation = options.path2_annotation || '';\n\t this.path3_annotation = options.path3_annotation || '';\n\t this.textMargin = this.getAttr('text-margin');\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t this.params = options.params;\n\t if (options.direction_next === 'path1' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path2' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t if (options.direction_next === 'path3' && !options[options.direction_next] && options.next) {\n\t options[options.direction_next] = options.next;\n\t }\n\t\n\t if (options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path1 === 'right') {\n\t this.path2_direction = 'bottom';\n\t this.path1_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path1 === 'top') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'top';\n\t this.path3_direction = 'bottom';\n\t } else if (options.direction_path1 === 'left') {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'left';\n\t this.path3_direction = 'bottom';\n\t } else {\n\t this.path2_direction = 'right';\n\t this.path1_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && options.direction_path2 && options.path3 && !options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'top';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'left';\n\t this.path3_direction = 'right';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else if (options.path1 && !options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && options.direction_path3) {\n\t if (options.direction_path2 === 'right') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'top';\n\t this.path3_direction = 'right';\n\t } else if (options.direction_path2 === 'left') {\n\t this.path1_direction = 'bottom';\n\t this.path2_direction = 'right';\n\t this.path3_direction = 'left';\n\t } else {\n\t this.path1_direction = 'right';\n\t this.path2_direction = 'bottom';\n\t this.path3_direction = 'top';\n\t }\n\t } else {\n\t this.path1_direction = options.direction_path1;\n\t this.path2_direction = options.direction_path2;\n\t this.path3_direction = options.direction_path3;\n\t }\n\t\n\t this.path1_direction = this.path1_direction || 'bottom';\n\t this.path2_direction = this.path2_direction || 'right';\n\t this.path3_direction = this.path3_direction || 'top';\n\t\n\t this.initialize();\n\t}\n\tinherits(Parallel, Symbol);\n\t\n\tParallel.prototype.render = function() {\n\t if (this.path1_direction) {\n\t this[this.path1_direction + '_symbol'] = this.path1_symbol;\n\t }\n\t\n\t if (this.path2_direction) {\n\t this[this.path2_direction + '_symbol'] = this.path2_symbol;\n\t }\n\t\n\t if (this.path3_direction) {\n\t this[this.path3_direction + '_symbol'] = this.path3_symbol;\n\t }\n\t\n\t var lineLength = this.getAttr('line-length');\n\t\n\t if (this.bottom_symbol) {\n\t var bottomPoint = this.getBottom();\n\t\n\t if (!this.bottom_symbol.isPositioned) {\n\t this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2);\n\t this.bottom_symbol.isPositioned = true;\n\t\n\t this.bottom_symbol.render();\n\t }\n\t }\n\t\n\t if (this.top_symbol) {\n\t var topPoint = this.getTop();\n\t\n\t if (!this.top_symbol.isPositioned) {\n\t this.top_symbol.shiftY(this.getY() - this.top_symbol.height - lineLength);\n\t this.top_symbol.setX(topPoint.x + this.top_symbol.width);\n\t this.top_symbol.isPositioned = true;\n\t\n\t this.top_symbol.render();\n\t }\n\t }\n\t\n\t var self = this;\n\t\n\t if (this.left_symbol) {\n\t var leftPoint = this.getLeft();\n\t\n\t if (!this.left_symbol.isPositioned) {\n\t this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n\t this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.left_symbol.symbolType === 'end') return;\n\t self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.left_symbol.isPositioned = true;\n\t\n\t this.left_symbol.render();\n\t }\n\t }\n\t\n\t if (this.right_symbol) {\n\t var rightPoint = this.getRight();\n\t\n\t if (!this.right_symbol.isPositioned) {\n\t this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2);\n\t this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t (function shift() {\n\t var hasSymbolUnder = false;\n\t var symb;\n\t for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t symb = self.chart.symbols[i];\n\t\n\t if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n\t hasSymbolUnder = true;\n\t break;\n\t }\n\t }\n\t }\n\t\n\t if (hasSymbolUnder) {\n\t if (self.right_symbol.symbolType === 'end') return;\n\t self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t shift();\n\t }\n\t })();\n\t\n\t this.right_symbol.isPositioned = true;\n\t\n\t this.right_symbol.render();\n\t }\n\t }\n\t};\n\t\n\tParallel.prototype.renderLines = function() {\n\t if (this.path1_symbol) {\n\t this.drawLineTo(this.path1_symbol, this.path1_annotation, this.path1_direction);\n\t }\n\t\n\t if (this.path2_symbol) {\n\t this.drawLineTo(this.path2_symbol, this.path2_annotation, this.path2_direction);\n\t }\n\t\n\t if (this.path3_symbol) {\n\t this.drawLineTo(this.path3_symbol, this.path3_annotation, this.path3_direction);\n\t }\n\t};\n\t\n\tmodule.exports = Parallel;\n\n/***/ }),\n/* 7 */\n/*!********************************!*\\\n !*** ./src/flowchart.chart.js ***!\n \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 16);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 8);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\tvar Parallel = __webpack_require__(/*! ./flowchart.symbol.parallel */ 6);\n\t\n\tfunction FlowChart(container, options) {\n\t options = options || {};\n\t\n\t this.paper = new Raphael(container);\n\t\n\t this.options = defaults(options, defaultOptions);\n\t\n\t this.symbols = [];\n\t this.lines = [];\n\t this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t if (this.symbols.indexOf(symbol) <= -1) {\n\t this.symbols.push(symbol);\n\t }\n\t\n\t var flowChart = this;\n\t\n\t if (symbol instanceof(Condition)) {\n\t symbol.yes = function(nextSymbol) {\n\t symbol.yes_symbol = nextSymbol;\n\t if(symbol.no_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.no = function(nextSymbol) {\n\t symbol.no_symbol = nextSymbol;\n\t if (symbol.yes_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else if (symbol instanceof(Parallel)) {\n\t symbol.path1 = function(nextSymbol) {\n\t symbol.path1_symbol = nextSymbol;\n\t if (symbol.path2_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.path2 = function(nextSymbol) {\n\t symbol.path2_symbol = nextSymbol;\n\t if (symbol.path3_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t symbol.path3 = function(nextSymbol) {\n\t symbol.path3_symbol = nextSymbol;\n\t if (symbol.path1_symbol) {\n\t symbol.pathOk = true;\n\t }\n\t return flowChart.handle(nextSymbol);\n\t };\n\t } else {\n\t symbol.then = function(nextSymbol) {\n\t symbol.next = nextSymbol;\n\t symbol.pathOk = true;\n\t return flowChart.handle(nextSymbol);\n\t };\n\t }\n\t\n\t return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t this.start = symbol;\n\t return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t var maxWidth = 0,\n\t maxHeight = 0,\n\t i = 0,\n\t len = 0,\n\t maxX = 0,\n\t maxY = 0,\n\t minX = 0,\n\t minY = 0,\n\t symbol,\n\t line;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t if (symbol.width > maxWidth) {\n\t maxWidth = symbol.width;\n\t }\n\t if (symbol.height > maxHeight) {\n\t maxHeight = symbol.height;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t }\n\t\n\t this.start.render();\n\t // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t // symbol = this.symbols[i];\n\t // symbol.render();\n\t // }\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t symbol.renderLines();\n\t }\n\t\n\t maxX = this.maxXFromLine;\n\t\n\t var x;\n\t var y;\n\t\n\t for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t var leftX = symbol.getX()\n\t x = leftX + symbol.width;\n\t y = symbol.getY() + symbol.height;\n\t if (leftX < minX) {\n\t minX = leftX;\n\t }\n\t if (x > maxX) {\n\t maxX = x;\n\t }\n\t if (y > maxY) {\n\t maxY = y;\n\t }\n\t }\n\t\n\t for (i = 0, len = this.lines.length; i < len; i++) {\n\t line = this.lines[i].getBBox();\n\t x = line.x;\n\t y = line.y;\n\t var x2 = line.x2;\n\t var y2 = line.y2;\n\t if (x < minX) {\n\t minX = x;\n\t }\n\t if (y < minY) {\n\t minY = y;\n\t }\n\t if (x2 > maxX) {\n\t maxX = x2;\n\t }\n\t if (y2 > maxY) {\n\t maxY = y2;\n\t }\n\t }\n\t\n\t var scale = this.options['scale'];\n\t var lineWidth = this.options['line-width'];\n\t\n\t if (this.minXFromSymbols < minX) minX = this.minXFromSymbols;\n\t\n\t if (minX < 0) minX -= lineWidth;\n\t if (minY < 0) minY -= lineWidth;\n\t\n\t var width = maxX + lineWidth - minX;\n\t var height = maxY + lineWidth - minY;\n\t\n\t this.paper.setSize(width * scale, height * scale);\n\t this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t if (this.paper) {\n\t var paperDom = this.paper.canvas;\n\t paperDom.parentNode && paperDom.parentNode.removeChild(paperDom);\n\t }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n/***/ }),\n/* 8 */\n/*!***********************************!*\\\n !*** ./src/flowchart.defaults.js ***!\n \\***********************************/\n/***/ (function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t 'x': 0,\n\t 'y': 0,\n\t // 'roundness': 0,\n\t 'line-width': 3,\n\t 'line-length': 50,\n\t 'text-margin': 10,\n\t 'font-size': 14,\n\t 'font-color': 'black',\n\t // 'font': 'normal',\n\t // 'font-family': 'calibri',\n\t // 'font-weight': 'normal',\n\t 'line-color': 'black',\n\t 'element-color': 'black',\n\t 'fill': 'white',\n\t 'yes-text': 'yes',\n\t 'no-text': 'no',\n\t 'arrow-end': 'block',\n\t 'class': 'flowchart',\n\t 'scale': 1,\n\t 'symbols': {\n\t 'start': {},\n\t 'end': {},\n\t 'condition': {},\n\t 'inputoutput': {},\n\t 'operation': {},\n\t 'subroutine': {},\n\t 'parallel': {}\n\t } //,\n\t // 'flowstate' : {\n\t // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t // 'future' : { 'fill': '#FFFF99'},\n\t // 'invalid': {'fill': '#444444'}\n\t // }\n\t};\n\n/***/ }),\n/* 9 */\n/*!*******************************!*\\\n !*** ./src/flowchart.shim.js ***!\n \\*******************************/\n/***/ (function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = 0;\n\t if (arguments.length > 0) {\n\t n = Number(arguments[1]);\n\t if (n != n) { // shortcut for verifying if it's NaN\n\t n = 0;\n\t } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t if (n >= len) {\n\t return -1;\n\t }\n\t var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t for (; k < len; k++) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t \"use strict\";\n\t if (this === null) {\n\t throw new TypeError();\n\t }\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t if (len === 0) {\n\t return -1;\n\t }\n\t var n = len;\n\t if (arguments.length > 1) {\n\t n = Number(arguments[1]);\n\t if (n != n) {\n\t n = 0;\n\t } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t }\n\t }\n\t var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t for (; k >= 0; k--) {\n\t if (k in t && t[k] === searchElement) {\n\t return k;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t String.prototype.trim = function() {\n\t return this.replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n/***/ }),\n/* 10 */\n/*!*************************************!*\\\n !*** ./src/flowchart.symbol.end.js ***!\n \\*************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'End';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ }),\n/* 11 */\n/*!*********************************************!*\\\n !*** ./src/flowchart.symbol.inputoutput.js ***!\n \\*********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t\n\t this.text.attr({\n\t x: this.textMargin * 3\n\t });\n\t\n\t var width = this.text.getBBox().width + 4 * this.textMargin;\n\t var height = this.text.getBBox().height + 2 * this.textMargin;\n\t var startX = this.textMargin;\n\t var startY = height/2;\n\t\n\t var start = {x: startX, y: startY};\n\t var points = [\n\t {x: startX - this.textMargin, y: height},\n\t {x: startX - this.textMargin + width, y: height},\n\t {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t {x: startX, y: startY}\n\t ];\n\t\n\t var symbol = drawPath(chart, start, points);\n\t\n\t symbol.attr({\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.link) { symbol.attr('href', options.link); }\n\t if (options.target) { symbol.attr('target', options.target); }\n\t if (options.key) { symbol.node.id = options.key; }\n\t symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t this.text.attr({\n\t y: symbol.getBBox().height/2\n\t });\n\t\n\t this.group.push(symbol);\n\t symbol.insertBefore(this.text);\n\t this.symbol = symbol\n\t\n\t this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t var y = this.getY() + this.group.getBBox().height/2;\n\t var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ }),\n/* 12 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.operation.js ***!\n \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ }),\n/* 13 */\n/*!***************************************!*\\\n !*** ./src/flowchart.symbol.start.js ***!\n \\***************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t options = options || {};\n\t options.text = options.text || 'Start';\n\t Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t// if (this.next) {\n\t// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t// var bottomPoint = this.getBottom();\n\t// var topPoint = this.next.getTop();\n\t\n\t// if (!this.next.isPositioned) {\n\t// this.next.shiftY(this.getY() + this.height + lineLength);\n\t// this.next.setX(bottomPoint.x - this.next.width/2);\n\t// this.next.isPositioned = true;\n\t\n\t// this.next.render();\n\t// }\n\t// }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t// if (this.next) {\n\t// this.drawLineTo(this.next);\n\t// }\n\t// };\n\n\n/***/ }),\n/* 14 */\n/*!********************************************!*\\\n !*** ./src/flowchart.symbol.subroutine.js ***!\n \\********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t var symbol = chart.paper.rect(0, 0, 0, 0);\n\t options = options || {};\n\t Symbol.call(this, chart, options, symbol);\n\t\n\t symbol.attr({\n\t width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t });\n\t\n\t this.text.attr({\n\t 'x': 2 * this.getAttr('text-margin')\n\t });\n\t\n\t var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t innerWrap.attr({\n\t x: this.getAttr('text-margin'),\n\t stroke: this.getAttr('element-color'),\n\t 'stroke-width': this.getAttr('line-width'),\n\t width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t fill: this.getAttr('fill')\n\t });\n\t if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t var font = this.getAttr('font');\n\t var fontF = this.getAttr('font-family');\n\t var fontW = this.getAttr('font-weight');\n\t\n\t if (font) innerWrap.attr({ 'font': font });\n\t if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t if (options.link) { innerWrap.attr('href', options.link); }\n\t if (options.target) { innerWrap.attr('target', options.target); }\n\t this.group.push(innerWrap);\n\t innerWrap.insertBefore(this.text);\n\t\n\t this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ }),\n/* 15 */\n/*!******************************!*\\\n !*** ./src/jquery-plugin.js ***!\n \\******************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\n\t\t(function( $ ) {\n\t\t\tfunction paramFit(needle, haystack) {\n\t\t\t\treturn needle == haystack ||\n\t\t\t\t( Array.isArray(haystack) && (haystack.includes(needle) || haystack.includes(Number(needle)) ))\n\t\t\t}\n\t\t\tvar methods = {\n\t\t\t\tinit : function(options) {\n\t\t\t\t\treturn this.each(function() {\n\t\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\t\tthis.chart = parse($this.text());\n\t\t\t\t\t\t$this.html('');\n\t\t\t\t\t\tthis.chart.drawSVG(this, options);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tsetFlowStateByParam : function(param, paramValue, newFlowState) {\n\t\t\t\t\treturn this.each(function() {\n\t\t\t\t\t\tvar chart = this.chart;\n\t\n\t\t\t\t\t\t// @todo this should be part of Symbol API\n\t\t\t\t\t\tvar nextSymbolKeys = ['next', 'yes', 'no', 'path1', 'path2', 'path3'];\n\t\n\t\t\t\t\t\tfor (var property in chart.symbols) {\n\t\t\t\t\t\t\tif (chart.symbols.hasOwnProperty(property)) {\n\t\t\t\t\t\t\t\tvar symbol = chart.symbols[property];\n\t\t\t\t\t\t\t\tvar val = symbol.params[param];\n\t\t\t\t\t\t\t\tif (paramFit(val, paramValue)) {\n\t\t\t\t\t\t\t\t\tsymbol.flowstate = newFlowState;\n\t\t\t\t\t\t\t\t\tfor (var nski = 0; nski < nextSymbolKeys.length; nski++) {\n\t\t\t\t\t\t\t\t\t\tvar nextSymbolKey = nextSymbolKeys[nski];\n\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey] &&\n\t\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey]['params'] &&\n\t\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey]['params'][param] &&\n\t\t\t\t\t\t\t\t\t\t\tparamFit(symbol[nextSymbolKey]['params'][param], paramValue)\n\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\tsymbol.lineStyle[symbol[nextSymbolKey]['key']] = {stroke: chart.options()['flowstate'][newFlowState]['fill']};\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tchart.clean();\n\t\t\t\t\t\tchart.drawSVG(this);\n\t\t\t\t\t});\n\t\n\t\t\t\t},\n\t\t\t\tclearFlowState: function () {\n\t\t\t\t\treturn this.each(function() {\n\t\t\t\t\t\tvar chart = this.chart;\n\t\n\t\t\t\t\t\tfor (var property in chart.symbols) {\n\t\t\t\t\t\t\tif (chart.symbols.hasOwnProperty(property)) {\n\t\t\t\t\t\t\t\tvar node = chart.symbols[property];\n\t\t\t\t\t\t\t\tnode.flowstate = '';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tchart.clean();\n\t\t\t\t\t\tchart.drawSVG(this);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t\t$.fn.flowChart = function(methodOrOptions) {\n\t\t\t\tif ( methods[methodOrOptions] ) {\n\t\t\t\t\treturn methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 ));\n\t\t\t\t} else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ) {\n\t\t\t\t\t// Default to \"init\"\n\t\t\t\t\treturn methods.init.apply( this, arguments );\n\t\t\t\t} else {\n\t\t\t\t\t$.error( 'Method ' + methodOrOptions + ' does not exist on jQuery.flowChart' );\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ }),\n/* 16 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ (function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// flowchart.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 3903fb8ba547e7860dbb","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./index.js\n// module id = 0\n// module chunks = 0","function _defaults(options, defaultOptions) {\n if (!options || typeof options === 'function') {\n return defaultOptions;\n }\n\n var merged = {};\n for (var attrname in defaultOptions) {\n merged[attrname] = defaultOptions[attrname];\n }\n\n for (attrname in options) {\n if (options[attrname]) {\n if (typeof merged[attrname] === 'object') {\n merged[attrname] = _defaults(merged[attrname], options[attrname]);\n } else {\n merged[attrname] = options[attrname];\n }\n }\n }\n return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n if (typeof(Object.create) === 'function') {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n defaults: _defaults,\n inherits: _inherits\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.helpers.js\n// module id = 1\n// module chunks = 0","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n this.chart = chart;\n this.group = this.chart.paper.set();\n this.symbol = symbol;\n this.connectedTo = [];\n this.symbolType = options.symbolType;\n this.flowstate = (options.flowstate || 'future');\n this.lineStyle = (options.lineStyle || {});\n this.key = (options.key || '');\n this.leftLines = [];\n this.rightLines = [];\n this.topLines = [];\n this.bottomLines = [];\n this.params = options.params;\n\n this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n this.text = this.chart.paper.text(0, 0, options.text);\n //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n if (options.key) { this.text.node.id = options.key + 't'; }\n this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n this.text.attr({\n 'text-anchor': 'start',\n 'x' : this.getAttr('text-margin'),\n 'fill' : this.getAttr('font-color'),\n 'font-size' : this.getAttr('font-size')\n });\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) this.text.attr({ 'font': font });\n if (fontF) this.text.attr({ 'font-family': fontF });\n if (fontW) this.text.attr({ 'font-weight': fontW });\n\n if (options.link) { this.text.attr('href', options.link); }\n \n //ndrqu Add click function with event and options params\n if (options.function) { \n this.text.attr({ 'cursor' : 'pointer' });\n\n this.text.node.addEventListener(\"click\", function(evt) {\n window[options.function](evt,options);\n }, false);\n }\n\n if (options.target) { this.text.attr('target', options.target); }\n\n var maxWidth = this.getAttr('maxWidth');\n if (maxWidth) {\n // using this approach: http://stackoverflow.com/a/3153457/22466\n var words = options.text.split(' ');\n var tempText = \"\";\n for (var i=0, ii=words.length; i maxWidth) {\n tempText += \"\\n\" + word;\n } else {\n tempText += \" \" + word;\n }\n }\n this.text.attr(\"text\", tempText.substring(1));\n }\n\n this.group.push(this.text);\n\n if (symbol) {\n var tmpMargin = this.getAttr('text-margin');\n\n symbol.attr({\n 'fill' : this.getAttr('fill'),\n 'stroke' : this.getAttr('element-color'),\n 'stroke-width' : this.getAttr('line-width'),\n 'width' : this.text.getBBox().width + 2 * tmpMargin,\n 'height' : this.text.getBBox().height + 2 * tmpMargin\n });\n\n symbol.node.setAttribute('class', this.getAttr('class'));\n var roundness = this.getAttr('roundness');\n if (!isNaN(roundness)) {\n symbol.node.setAttribute('ry', roundness);\n symbol.node.setAttribute('rx', roundness);\n }\n\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n\n //ndrqu Add click function with event and options params\n if (options.function) { \n symbol.node.addEventListener(\"click\", function(evt) {\n window[options.function](evt,options);\n }, false);\n symbol.attr({ 'cursor' : 'pointer' });\n }\n if (options.key) { symbol.node.id = options.key; }\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n\n this.text.attr({\n 'y': symbol.getBBox().height/2\n });\n\n this.initialize();\n }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n if (!this.chart) {\n return undefined;\n }\n var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n var opt1;\n if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n opt1 = this.chart.options.flowstate[this.flowstate][attName];\n }\n return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n this.width = this.group.getBBox().width;\n this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n return {x: this.getX() + this.width/2,\n y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n var y = this.getY();\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n var y = this.getY() + this.height;\n var x = this.getX() + this.width/2;\n return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX();\n return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width;\n return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n if (this.next) {\n\n var self = this;\n var lineLength = this.getAttr('line-length');\n\n if (this.next_direction === 'right') {\n\n var rightPoint = this.getRight();\n\n if (!this.next.isPositioned) {\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n if (self.next.symbolType === 'end') return;\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else if (this.next_direction === 'left') {\n\n var leftPoint = this.getLeft();\n\n if (!this.next.isPositioned) {\n this.next.setY(leftPoint.y - this.next.height/2);\n this.next.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n\n if (hasSymbolUnder) {\n if (self.next.symbolType === 'end') return;\n self.next.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.next.isPositioned = true;\n\n this.next.render();\n }\n } else {\n var bottomPoint = this.getBottom();\n\n if (!this.next.isPositioned) {\n this.next.shiftY(this.getY() + this.height + lineLength);\n this.next.setX(bottomPoint.x - this.next.width/2);\n this.next.isPositioned = true;\n\n this.next.render();\n }\n }\n }\n};\n\nSymbol.prototype.renderLines = function() {\n if (this.next) {\n if (this.next_direction) {\n this.drawLineTo(this.next, this.getAttr('arrow-text') || '', this.next_direction);\n } else {\n this.drawLineTo(this.next, this.getAttr('arrow-text') || '');\n }\n }\n};\n\nSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n if (this.connectedTo.indexOf(symbol) < 0) {\n this.connectedTo.push(symbol);\n }\n\n var x = this.getCenter().x,\n y = this.getCenter().y,\n right = this.getRight(),\n bottom = this.getBottom(),\n top = this.getTop(),\n left = this.getLeft();\n\n var symbolX = symbol.getCenter().x,\n symbolY = symbol.getCenter().y,\n symbolTop = symbol.getTop(),\n symbolRight = symbol.getRight(),\n symbolLeft = symbol.getLeft();\n\n var isOnSameColumn = x === symbolX,\n isOnSameLine = y === symbolY,\n isUnder = y < symbolY,\n isUpper = y > symbolY || this === symbol,\n isLeft = x > symbolX,\n isRight = x < symbolX;\n\n var maxX = 0,\n line,\n yOffset,\n lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n if (symbol.topLines.length === 0 && this.bottomLines.length === 0) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n } else {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n line = drawLine(this.chart, bottom, [\n {x: symbolTop.x, y: symbolTop.y - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n if (symbol.leftLines.length === 0 && this.rightLines.length === 0) {\n line = drawLine(this.chart, right, symbolLeft, text);\n } else {\n yOffset = Math.max(symbol.leftLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x, y: right.y - yOffset},\n {x: right.x, y: symbolLeft.y - yOffset},\n {x: symbolLeft.x, y: symbolLeft.y - yOffset},\n {x: symbolLeft.x, y: symbolLeft.y}\n ], text);\n }\n this.rightLines.push(line);\n symbol.leftLines.push(line);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n if (symbol.rightLines.length === 0 && this.leftLines.length === 0) {\n line = drawLine(this.chart, left, symbolRight, text);\n } else {\n yOffset = Math.max(symbol.rightLines.length, this.leftLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x, y: right.y - yOffset},\n {x: right.x, y: symbolRight.y - yOffset},\n {x: symbolRight.x, y: symbolRight.y - yOffset},\n {x: symbolRight.x, y: symbolRight.y}\n ], text);\n }\n this.leftLines.push(line);\n symbol.rightLines.push(line);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y - yOffset},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightLines.push(line);\n symbol.topLines.push(line);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y - yOffset},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightLines.push(line);\n symbol.topLines.push(line);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2 - yOffset},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n } else {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((!origin || origin === 'bottom') && isRight && isUnder) {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n if (symbolTop.x > maxX) maxX = symbolTop.x;\n } else if ((!origin || origin === 'bottom') && isRight) {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2 - yOffset},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n } else if ((origin && origin === 'right') && isLeft) {\n yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: right.x + lineLength/2, y: right.y},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightLines.push(line);\n symbol.topLines.push(line);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n yOffset = Math.max(symbol.topLines.length, this.rightLines.length) * 10;\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y - yOffset},\n {x: symbolTop.x, y: symbolTop.y - yOffset}\n ], text);\n this.rightLines.push(line);\n symbol.topLines.push(line);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n yOffset = Math.max(symbol.topLines.length, this.bottomLines.length) * 10;\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2 - yOffset},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2 - yOffset},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.bottomLines.push(line);\n symbol.topLines.push(line);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x + lineLength/2;\n } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n var diffX = left.x - lineLength/2;\n if (symbolLeft.x < left.x) {\n diffX = symbolLeft.x - lineLength/2;\n }\n yOffset = Math.max(symbol.topLines.length, this.leftLines.length) * 10;\n line = drawLine(this.chart, left, [\n {x: diffX, y: left.y - yOffset},\n {x: diffX, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftLines.push(line);\n symbol.topLines.push(line);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\n yOffset = Math.max(symbol.topLines.length, this.leftLines.length) * 10;\n line = drawLine(this.chart, left, [\n {x: symbolTop.x + (left.x - symbolTop.x)/2, y: left.y},\n {x: symbolTop.x + (left.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftLines.push(line);\n symbol.topLines.push(line);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'top')) {\n yOffset = Math.max(symbol.topLines.length, this.topLines.length) * 10;\n line = drawLine(this.chart, top, [\n {x: top.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2 - yOffset},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.topLines.push(line);\n symbol.topLines.push(line);\n this.topStart = true;\n symbol.topEnd = true;\n maxX = top.x;\n }\n\n //update line style\n if (this.lineStyle[symbol.key] && line){\n line.attr(this.lineStyle[symbol.key]);\n }\n\n if (line) {\n for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n var otherLine = this.chart.lines[l];\n\n var ePath = otherLine.attr('path'),\n lPath = line.attr('path');\n\n for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n var newPath = [];\n newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\n var line1_from_x = newPath[0][1];\n var line1_from_y = newPath[0][2];\n var line1_to_x = newPath[1][1];\n var line1_to_y = newPath[1][2];\n\n for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n var newLinePath = [];\n newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\n var line2_from_x = newLinePath[0][1];\n var line2_from_y = newLinePath[0][2];\n var line2_to_x = newLinePath[1][1];\n var line2_to_y = newLinePath[1][2];\n\n var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n if (res.onLine1 && res.onLine2) {\n\n var newSegment;\n if (line2_from_y === line2_to_y) {\n if (line2_from_x > line2_to_x) {\n newSegment = ['L', res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x + lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', res.x - lineWith * 2, line2_from_y];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', res.x - lineWith * 2, line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n } else {\n if (line2_from_y > line2_to_y) {\n newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n } else {\n newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n lPath.splice(lP + 1, 0, newSegment);\n newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n lPath.splice(lP + 2, 0, newSegment);\n line.attr('path', lPath);\n }\n }\n\n lP += 2;\n }\n }\n }\n }\n\n this.chart.lines.push(line);\n if (this.chart.minXFromSymbols === undefined || this.chart.minXFromSymbols > left.x) {\n this.chart.minXFromSymbols = left.x;\n }\n }\n\n if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n this.chart.maxXFromLine = maxX;\n }\n};\n\nmodule.exports = Symbol;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.js\n// module id = 2\n// module chunks = 0","function drawPath(chart, location, points) {\n var i, len;\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [location.x, location.y];\n for (i = 0, len = points.length; i < len; i++) {\n pathValues.push(points[i].x);\n pathValues.push(points[i].y);\n }\n var symbol = chart.paper.path(path, pathValues);\n symbol.attr('stroke', chart.options['element-color']);\n symbol.attr('stroke-width', chart.options['line-width']);\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) symbol.attr({ 'font': font });\n if (fontF) symbol.attr({ 'font-family': fontF });\n if (fontW) symbol.attr({ 'font-weight': fontW });\n\n return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n var i, len;\n\n if (Object.prototype.toString.call(to) !== '[object Array]') {\n to = [to];\n }\n\n var path = 'M{0},{1}';\n for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n path += ' L{' + i + '},{' + (i + 1) + '}';\n }\n var pathValues = [from.x, from.y];\n for (i = 0, len = to.length; i < len; i++) {\n pathValues.push(to[i].x);\n pathValues.push(to[i].y);\n }\n\n var line = chart.paper.path(path, pathValues);\n line.attr({\n stroke: chart.options['line-color'],\n 'stroke-width': chart.options['line-width'],\n 'arrow-end': chart.options['arrow-end']\n });\n\n var font = chart.options.font;\n var fontF = chart.options['font-family'];\n var fontW = chart.options['font-weight'];\n\n if (font) line.attr({ 'font': font });\n if (fontF) line.attr({ 'font-family': fontF });\n if (fontW) line.attr({ 'font-weight': fontW });\n\n if (text) {\n\n var centerText = false;\n\n var textPath = chart.paper.text(0, 0, text);\n var textAnchor = 'start';\n\n var isHorizontal = false;\n var firstTo = to[0];\n\n if (from.y === firstTo.y) {\n isHorizontal = true;\n }\n\n var x = 0,\n y = 0;\n\n if (centerText) {\n if (from.x > firstTo.x) {\n x = from.x - (from.x - firstTo.x)/2;\n } else {\n x = firstTo.x - (firstTo.x - from.x)/2;\n }\n\n if (from.y > firstTo.y) {\n y = from.y - (from.y - firstTo.y)/2;\n } else {\n y = firstTo.y - (firstTo.y - from.y)/2;\n }\n\n if (isHorizontal) {\n x -= textPath.getBBox().width/2;\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin'];\n y -= textPath.getBBox().height/2;\n }\n } else {\n x = from.x;\n y = from.y;\n\n if (isHorizontal) {\n if (from.x > firstTo.x) {\n x -= chart.options['text-margin']/2;\n textAnchor = 'end';\n } else {\n x += chart.options['text-margin']/2;\n }\n y -= chart.options['text-margin'];\n } else {\n x += chart.options['text-margin']/2;\n y += chart.options['text-margin'];\n if (from.y > firstTo.y) {\n y -= chart.options['text-margin']*2;\n }\n }\n }\n\n textPath.attr({\n 'text-anchor': textAnchor,\n 'font-size': chart.options['font-size'],\n 'fill': chart.options['font-color'],\n x: x,\n y: y\n });\n\n if (font) textPath.attr({ 'font': font });\n if (fontF) textPath.attr({ 'font-family': fontF });\n if (fontW) textPath.attr({ 'font-weight': fontW });\n }\n\n return line;\n}\n\nfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n var denominator, a, b, numerator1, numerator2, result = {\n x: null,\n y: null,\n onLine1: false,\n onLine2: false\n };\n denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n if (denominator === 0) {\n return result;\n }\n a = line1StartY - line2StartY;\n b = line1StartX - line2StartX;\n numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n a = numerator1 / denominator;\n b = numerator2 / denominator;\n\n // if we cast these lines infinitely in both directions, they intersect here:\n result.x = line1StartX + (a * (line1EndX - line1StartX));\n result.y = line1StartY + (a * (line1EndY - line1StartY));\n /*\n // it is worth noting that this should be the same as:\n x = line2StartX + (b * (line2EndX - line2StartX));\n y = line2StartX + (b * (line2EndY - line2StartY));\n */\n // if line1 is a segment and line2 is infinite, they intersect if:\n if (a > 0 && a < 1) {\n result.onLine1 = true;\n }\n // if line2 is a segment and line1 is infinite, they intersect if:\n if (b > 0 && b < 1) {\n result.onLine2 = true;\n }\n // if line1 and line2 are segments, they intersect if both of the above are true\n return result;\n}\n\nmodule.exports = {\n\tdrawPath: drawPath,\n\tdrawLine: drawLine,\n\tcheckLineIntersection: checkLineIntersection\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.functions.js\n// module id = 3\n// module chunks = 0","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\nvar Parallel = require('./flowchart.symbol.parallel');\n\nfunction parse(input) {\n input = input || '';\n input = input.trim();\n\n var chart = {\n symbols: {},\n start: null,\n drawSVG: function(container, options) {\n var self = this;\n\n if (this.diagram) {\n this.diagram.clean();\n }\n\n var diagram = new FlowChart(container, options);\n this.diagram = diagram;\n var dispSymbols = {};\n\n function getDisplaySymbol(s) {\n if (dispSymbols[s.key]) {\n return dispSymbols[s.key];\n }\n\n switch (s.symbolType) {\n case 'start':\n dispSymbols[s.key] = new Start(diagram, s);\n break;\n case 'end':\n dispSymbols[s.key] = new End(diagram, s);\n break;\n case 'operation':\n dispSymbols[s.key] = new Operation(diagram, s);\n break;\n case 'inputoutput':\n dispSymbols[s.key] = new InputOutput(diagram, s);\n break;\n case 'subroutine':\n dispSymbols[s.key] = new Subroutine(diagram, s);\n break;\n case 'condition':\n dispSymbols[s.key] = new Condition(diagram, s);\n break;\n case 'parallel':\n dispSymbols[s.key] = new Parallel(diagram, s);\n break;\n default:\n return new Error('Wrong symbol type!');\n }\n\n return dispSymbols[s.key];\n }\n\n (function constructChart(s, prevDisp, prev) {\n var dispSymb = getDisplaySymbol(s);\n\n if (self.start === s) {\n diagram.startWith(dispSymb);\n } else if (prevDisp && prev && !prevDisp.pathOk) {\n if (prevDisp instanceof(Condition)) {\n if (prev.yes === s) {\n prevDisp.yes(dispSymb);\n }\n if (prev.no === s) {\n prevDisp.no(dispSymb);\n }\n } else if (prevDisp instanceof(Parallel)) {\n if (prev.path1 === s) {\n prevDisp.path1(dispSymb);\n }\n if (prev.path2 === s) {\n prevDisp.path2(dispSymb);\n }\n if (prev.path3 === s) {\n prevDisp.path3(dispSymb);\n }\n } else {\n prevDisp.then(dispSymb);\n }\n }\n\n if (dispSymb.pathOk) {\n return dispSymb;\n }\n\n if (dispSymb instanceof(Condition)) {\n if (s.yes) {\n constructChart(s.yes, dispSymb, s);\n }\n if (s.no) {\n constructChart(s.no, dispSymb, s);\n }\n } else if (dispSymb instanceof(Parallel)) {\n if (s.path1) {\n constructChart(s.path1, dispSymb, s);\n }\n if (s.path2) {\n constructChart(s.path2, dispSymb, s);\n }\n if (s.path3) {\n constructChart(s.path3, dispSymb, s);\n }\n } else if (s.next) {\n constructChart(s.next, dispSymb, s);\n }\n\n return dispSymb;\n })(this.start);\n\n diagram.render();\n },\n clean: function() {\n this.diagram.clean();\n },\n options: function() {\n return this.diagram.options;\n }\n };\n\n var lines = [];\n var prevBreak = 0;\n for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n var line0 = input.substring(prevBreak, i0);\n prevBreak = i0 + 1;\n lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n }\n }\n\n if (prevBreak < input.length) {\n lines.push(input.substr(prevBreak));\n }\n\n for (var l = 1, len = lines.length; l < len;) {\n var currentLine = lines[l];\n\n if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\n }\n\n function getStyle(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '{}';\n }\n\n function getSymbValue(s){\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return s.substring(startIndex,endIndex);\n }\n return '';\n }\n\n function getSymbol(s) {\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n return chart.symbols[s.substring(0, startIndex - 1)];\n }\n return chart.symbols[s];\n }\n\n function getNextPath(s) {\n var next = 'next';\n var startIndex = s.indexOf('(') + 1;\n var endIndex = s.indexOf(')');\n if (startIndex >= 0 && endIndex >= 0) {\n next = flowSymb.substring(startIndex, endIndex);\n if (next.indexOf(',') < 0) {\n if (next !== 'yes' && next !== 'no') {\n next = 'next, ' + next;\n }\n }\n }\n return next;\n }\n \n function getAnnotation(s) {\n\tvar startIndex = s.indexOf(\"(\") + 1, endIndex = s.indexOf(\")\");\n\tvar tmp = s.substring(startIndex, endIndex);\n\tif(tmp.indexOf(\",\") > 0) { tmp = tmp.substring(0, tmp.indexOf(\",\")); }\n\tvar tmp_split = tmp.split(\"@\");\n\tif(tmp_split.length > 1)\n\t\treturn startIndex >= 0 && endIndex >= 0 ? tmp_split[1] : \"\";\n }\n\n while (lines.length > 0) {\n var line = lines.splice(0, 1)[0].trim();\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0].replace(/\\(.*\\)/, ''),\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null,\n function: null,\n lineStyle: {},\n params: {}\n };\n\n //parse parameters\n var params = parts[0].match(/\\((.*)\\)/);\n if (params && params.length > 1){\n var entries = params[1].split(',');\n for(var i = 0; i < entries.length; i++) {\n var entry = entries[i].split('=');\n if (entry.length == 2) {\n symbol.params[entry[0]] = entry[1];\n }\n }\n }\n\n var sub;\n\n if (symbol.symbolType.indexOf(': ') >= 0) {\n sub = symbol.symbolType.split(': ');\n symbol.symbolType = sub.shift();\n symbol.text = sub.join(': ');\n }\n\n if (symbol.text && symbol.text.indexOf(':$') >= 0) {\n sub = symbol.text.split(':$');\n symbol.text = sub.shift();\n symbol.function = sub.join(':$');\n } else if (symbol.symbolType.indexOf(':$') >= 0) {\n sub = symbol.symbolType.split(':$');\n symbol.symbolType = sub.shift();\n symbol.function = sub.join(':$');\n } else if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n sub = symbol.text.split(':>');\n symbol.text = sub.shift();\n symbol.link = sub.join(':>');\n } else if (symbol.symbolType.indexOf(':>') >= 0) {\n sub = symbol.symbolType.split(':>');\n symbol.symbolType = sub.shift();\n symbol.link = sub.join(':>');\n }\n\n if (symbol.symbolType.indexOf('\\n') >= 0) {\n symbol.symbolType = symbol.symbolType.split('\\n')[0];\n }\n\n /* adding support for links */\n if (symbol.link) {\n var startIndex = symbol.link.indexOf('[') + 1;\n var endIndex = symbol.link.indexOf(']');\n if (startIndex >= 0 && endIndex >= 0) {\n symbol.target = symbol.link.substring(startIndex, endIndex);\n symbol.link = symbol.link.substring(0, startIndex - 1);\n }\n }\n /* end of link support */\n\n /* adding support for flowstates */\n if (symbol.text) {\n if (symbol.text.indexOf('|') >= 0) {\n var txtAndState = symbol.text.split('|');\n symbol.flowstate = txtAndState.pop().trim();\n symbol.text = txtAndState.join('|');\n }\n }\n /* end of flowstate support */\n\n chart.symbols[symbol.key] = symbol;\n\n } else if (line.indexOf('->') >= 0) {\n var ann = getAnnotation(line);\n if (ann) {\n line = line.replace('@' + ann, ''); \n }\n // flow\n var flowSymbols = line.split('->');\n for (var iS = 0, lenS = flowSymbols.length; iS < lenS; iS++) {\n var flowSymb = flowSymbols[iS];\n var symbVal = getSymbValue(flowSymb);\n\n if (symbVal === 'true' || symbVal === 'false') {\n // map true or false to yes or no respectively\n flowSymb = flowSymb.replace('true', 'yes');\n flowSymb = flowSymb.replace('false', 'no');\n }\n \n var next = getNextPath(flowSymb);\n var realSymb = getSymbol(flowSymb);\n\n var direction = null;\n if (next.indexOf(',') >= 0) {\n var condOpt = next.split(',');\n next = condOpt[0];\n direction = condOpt[1].trim();\n }\n\n if (ann) {\n if (realSymb.symbolType === 'condition') {\n if (next === \"yes\" || next === \"true\") {\n realSymb.yes_annotation = ann;\n } else {\n realSymb.no_annotation = ann;\n }\n } else if (realSymb.symbolType === 'parallel') {\n if (next === 'path1') {\n realSymb.path1_annotation = ann;\n } else if (next === 'path2') {\n realSymb.path2_annotation = ann;\n } else if (next === 'path3') {\n realSymb.path3_annotation = ann;\n }\n }\n ann = null;\n }\n\n if (!chart.start) {\n chart.start = realSymb;\n }\n\n if (iS + 1 < lenS) {\n var nextSymb = flowSymbols[iS + 1];\n realSymb[next] = getSymbol(nextSymb);\n realSymb['direction_' + next] = direction;\n direction = null;\n }\n }\n } else if (line.indexOf('@>') >= 0) {\n\n // line style\n var lineStyleSymbols = line.split('@>');\n for (var iSS = 0, lenSS = lineStyleSymbols.length; iSS < lenSS; iSS++) {\n if ((iSS + 1) !== lenSS) {\n var curSymb = getSymbol(lineStyleSymbols[iSS]);\n var nextSymbol = getSymbol(lineStyleSymbols[iSS+1]);\n\n curSymb['lineStyle'][nextSymbol.key] = JSON.parse(getStyle(lineStyleSymbols[iSS + 1]));\n }\n }\n }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.parse.js\n// module id = 4\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.yes_annotation = options.yes_annotation;\n this.no_annotation = options.no_annotation;\n this.textMargin = this.getAttr('text-margin');\n this.yes_direction = options.direction_yes;\n this.no_direction = options.direction_no;\n if (!this.no_direction && this.yes_direction === 'right') {\n this.no_direction = 'bottom';\n } else if (!this.yes_direction && this.no_direction === 'bottom') {\n this.yes_direction = 'right'\n }\n this.yes_direction = this.yes_direction || 'bottom';\n this.no_direction = this.no_direction || 'right';\n\n this.text.attr({\n x: this.textMargin * 2\n });\n\n var width = this.text.getBBox().width + 3 * this.textMargin;\n width += width/2;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n height += height/2;\n height = Math.max(width * 0.5, height);\n var startX = width/4;\n var startY = height/4;\n\n this.text.attr({\n x: startX + this.textMargin/2\n });\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - width/4, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n {x: startX - width/4 + width, y: startY + height/4},\n {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n {x: startX - width/4, y: startY + height/4}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n this.symbol = symbol\n\n this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n var self = this;\n if (this.yes_direction) {\n this[this.yes_direction + '_symbol'] = this.yes_symbol;\n }\n\n if (this.no_direction) {\n this[this.no_direction + '_symbol'] = this.no_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n if (self.right_symbol.symbolType === 'end') return;\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n \n if (this.left_symbol) {\n var leftPoint = this.getLeft();\n \n if (!this.left_symbol.isPositioned) {\n this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n \n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n \n if (hasSymbolUnder) {\n if (self.left_symbol.symbolType === 'end') return;\n self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n \n this.left_symbol.isPositioned = true;\n \n this.left_symbol.render();\n }\n }\n};\n\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.yes_annotation ? this.yes_annotation : this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, this.no_annotation ? this.no_annotation : this.getAttr('no-text'), this.no_direction);\n }\n};\n\nmodule.exports = Condition;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.condition.js\n// module id = 5\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Parallel(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n this.path1_annotation = options.path1_annotation || '';\n this.path2_annotation = options.path2_annotation || '';\n this.path3_annotation = options.path3_annotation || '';\n this.textMargin = this.getAttr('text-margin');\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'top';\n this.params = options.params;\n if (options.direction_next === 'path1' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n if (options.direction_next === 'path2' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n if (options.direction_next === 'path3' && !options[options.direction_next] && options.next) {\n options[options.direction_next] = options.next;\n }\n\n if (options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3) {\n if (options.direction_path1 === 'right') {\n this.path2_direction = 'bottom';\n this.path1_direction = 'right';\n this.path3_direction = 'top';\n } else if (options.direction_path1 === 'top') {\n this.path2_direction = 'right';\n this.path1_direction = 'top';\n this.path3_direction = 'bottom';\n } else if (options.direction_path1 === 'left') {\n this.path2_direction = 'right';\n this.path1_direction = 'left';\n this.path3_direction = 'bottom';\n } else {\n this.path2_direction = 'right';\n this.path1_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else if (options.path1 && !options.direction_path1 && options.path2 && options.direction_path2 && options.path3 && !options.direction_path3) {\n if (options.direction_path2 === 'right') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'top';\n } else if (options.direction_path2 === 'left') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'left';\n this.path3_direction = 'right';\n } else {\n this.path1_direction = 'right';\n this.path2_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else if (options.path1 && !options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && options.direction_path3) {\n if (options.direction_path2 === 'right') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'top';\n this.path3_direction = 'right';\n } else if (options.direction_path2 === 'left') {\n this.path1_direction = 'bottom';\n this.path2_direction = 'right';\n this.path3_direction = 'left';\n } else {\n this.path1_direction = 'right';\n this.path2_direction = 'bottom';\n this.path3_direction = 'top';\n }\n } else {\n this.path1_direction = options.direction_path1;\n this.path2_direction = options.direction_path2;\n this.path3_direction = options.direction_path3;\n }\n\n this.path1_direction = this.path1_direction || 'bottom';\n this.path2_direction = this.path2_direction || 'right';\n this.path3_direction = this.path3_direction || 'top';\n\n this.initialize();\n}\ninherits(Parallel, Symbol);\n\nParallel.prototype.render = function() {\n if (this.path1_direction) {\n this[this.path1_direction + '_symbol'] = this.path1_symbol;\n }\n\n if (this.path2_direction) {\n this[this.path2_direction + '_symbol'] = this.path2_symbol;\n }\n\n if (this.path3_direction) {\n this[this.path3_direction + '_symbol'] = this.path3_symbol;\n }\n\n var lineLength = this.getAttr('line-length');\n\n if (this.bottom_symbol) {\n var bottomPoint = this.getBottom();\n\n if (!this.bottom_symbol.isPositioned) {\n this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2);\n this.bottom_symbol.isPositioned = true;\n\n this.bottom_symbol.render();\n }\n }\n\n if (this.top_symbol) {\n var topPoint = this.getTop();\n\n if (!this.top_symbol.isPositioned) {\n this.top_symbol.shiftY(this.getY() - this.top_symbol.height - lineLength);\n this.top_symbol.setX(topPoint.x + this.top_symbol.width);\n this.top_symbol.isPositioned = true;\n\n this.top_symbol.render();\n }\n }\n\n var self = this;\n\n if (this.left_symbol) {\n var leftPoint = this.getLeft();\n\n if (!this.left_symbol.isPositioned) {\n this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n if (self.left_symbol.symbolType === 'end') return;\n self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.left_symbol.isPositioned = true;\n\n this.left_symbol.render();\n }\n }\n\n if (this.right_symbol) {\n var rightPoint = this.getRight();\n\n if (!this.right_symbol.isPositioned) {\n this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2);\n this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n (function shift() {\n var hasSymbolUnder = false;\n var symb;\n for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n symb = self.chart.symbols[i];\n\n if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n hasSymbolUnder = true;\n break;\n }\n }\n }\n\n if (hasSymbolUnder) {\n if (self.right_symbol.symbolType === 'end') return;\n self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n shift();\n }\n })();\n\n this.right_symbol.isPositioned = true;\n\n this.right_symbol.render();\n }\n }\n};\n\nParallel.prototype.renderLines = function() {\n if (this.path1_symbol) {\n this.drawLineTo(this.path1_symbol, this.path1_annotation, this.path1_direction);\n }\n\n if (this.path2_symbol) {\n this.drawLineTo(this.path2_symbol, this.path2_annotation, this.path2_direction);\n }\n\n if (this.path3_symbol) {\n this.drawLineTo(this.path3_symbol, this.path3_annotation, this.path3_direction);\n }\n};\n\nmodule.exports = Parallel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.parallel.js\n// module id = 6\n// module chunks = 0","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\nvar Parallel = require('./flowchart.symbol.parallel');\n\nfunction FlowChart(container, options) {\n options = options || {};\n\n this.paper = new Raphael(container);\n\n this.options = defaults(options, defaultOptions);\n\n this.symbols = [];\n this.lines = [];\n this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n if (this.symbols.indexOf(symbol) <= -1) {\n this.symbols.push(symbol);\n }\n\n var flowChart = this;\n\n if (symbol instanceof(Condition)) {\n symbol.yes = function(nextSymbol) {\n symbol.yes_symbol = nextSymbol;\n if(symbol.no_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.no = function(nextSymbol) {\n symbol.no_symbol = nextSymbol;\n if (symbol.yes_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else if (symbol instanceof(Parallel)) {\n symbol.path1 = function(nextSymbol) {\n symbol.path1_symbol = nextSymbol;\n if (symbol.path2_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.path2 = function(nextSymbol) {\n symbol.path2_symbol = nextSymbol;\n if (symbol.path3_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n symbol.path3 = function(nextSymbol) {\n symbol.path3_symbol = nextSymbol;\n if (symbol.path1_symbol) {\n symbol.pathOk = true;\n }\n return flowChart.handle(nextSymbol);\n };\n } else {\n symbol.then = function(nextSymbol) {\n symbol.next = nextSymbol;\n symbol.pathOk = true;\n return flowChart.handle(nextSymbol);\n };\n }\n\n return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n this.start = symbol;\n return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n var maxWidth = 0,\n maxHeight = 0,\n i = 0,\n len = 0,\n maxX = 0,\n maxY = 0,\n minX = 0,\n minY = 0,\n symbol,\n line;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n if (symbol.width > maxWidth) {\n maxWidth = symbol.width;\n }\n if (symbol.height > maxHeight) {\n maxHeight = symbol.height;\n }\n }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n }\n\n this.start.render();\n // for (i = 0, len = this.symbols.length; i < len; i++) {\n // symbol = this.symbols[i];\n // symbol.render();\n // }\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n symbol.renderLines();\n }\n\n maxX = this.maxXFromLine;\n\n var x;\n var y;\n\n for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n var leftX = symbol.getX()\n x = leftX + symbol.width;\n y = symbol.getY() + symbol.height;\n if (leftX < minX) {\n minX = leftX;\n }\n if (x > maxX) {\n maxX = x;\n }\n if (y > maxY) {\n maxY = y;\n }\n }\n\n for (i = 0, len = this.lines.length; i < len; i++) {\n line = this.lines[i].getBBox();\n x = line.x;\n y = line.y;\n var x2 = line.x2;\n var y2 = line.y2;\n if (x < minX) {\n minX = x;\n }\n if (y < minY) {\n minY = y;\n }\n if (x2 > maxX) {\n maxX = x2;\n }\n if (y2 > maxY) {\n maxY = y2;\n }\n }\n\n var scale = this.options['scale'];\n var lineWidth = this.options['line-width'];\n\n if (this.minXFromSymbols < minX) minX = this.minXFromSymbols;\n\n if (minX < 0) minX -= lineWidth;\n if (minY < 0) minY -= lineWidth;\n\n var width = maxX + lineWidth - minX;\n var height = maxY + lineWidth - minY;\n\n this.paper.setSize(width * scale, height * scale);\n this.paper.setViewBox(minX, minY, width, height, true);\n};\n\nFlowChart.prototype.clean = function() {\n if (this.paper) {\n var paperDom = this.paper.canvas;\n paperDom.parentNode && paperDom.parentNode.removeChild(paperDom);\n }\n};\n\nmodule.exports = FlowChart;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.chart.js\n// module id = 7\n// module chunks = 0","// defaults\nmodule.exports = {\n 'x': 0,\n 'y': 0,\n // 'roundness': 0,\n 'line-width': 3,\n 'line-length': 50,\n 'text-margin': 10,\n 'font-size': 14,\n 'font-color': 'black',\n // 'font': 'normal',\n // 'font-family': 'calibri',\n // 'font-weight': 'normal',\n 'line-color': 'black',\n 'element-color': 'black',\n 'fill': 'white',\n 'yes-text': 'yes',\n 'no-text': 'no',\n 'arrow-end': 'block',\n 'class': 'flowchart',\n 'scale': 1,\n 'symbols': {\n 'start': {},\n 'end': {},\n 'condition': {},\n 'inputoutput': {},\n 'operation': {},\n 'subroutine': {},\n 'parallel': {}\n } //,\n // 'flowstate' : {\n // 'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n // 'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n // 'future' : { 'fill': '#FFFF99'},\n // 'invalid': {'fill': '#444444'}\n // }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.defaults.js\n// module id = 8\n// module chunks = 0","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n != n) { // shortcut for verifying if it's NaN\n n = 0;\n } else if (n !== 0 && n != Infinity && n != -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n if (n >= len) {\n return -1;\n }\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n \"use strict\";\n if (this === null) {\n throw new TypeError();\n }\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0) {\n return -1;\n }\n var n = len;\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n if (n != n) {\n n = 0;\n } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n for (; k >= 0; k--) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n return -1;\n };\n}\n\nif (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^\\s+|\\s+$/g, '');\n };\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.shim.js\n// module id = 9\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'End';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.end.js\n// module id = 10\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n options = options || {};\n Symbol.call(this, chart, options);\n this.textMargin = this.getAttr('text-margin');\n\n this.text.attr({\n x: this.textMargin * 3\n });\n\n var width = this.text.getBBox().width + 4 * this.textMargin;\n var height = this.text.getBBox().height + 2 * this.textMargin;\n var startX = this.textMargin;\n var startY = height/2;\n\n var start = {x: startX, y: startY};\n var points = [\n {x: startX - this.textMargin, y: height},\n {x: startX - this.textMargin + width, y: height},\n {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n {x: startX, y: startY}\n ];\n\n var symbol = drawPath(chart, start, points);\n\n symbol.attr({\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n fill: this.getAttr('fill')\n });\n if (options.link) { symbol.attr('href', options.link); }\n if (options.target) { symbol.attr('target', options.target); }\n if (options.key) { symbol.node.id = options.key; }\n symbol.node.setAttribute('class', this.getAttr('class'));\n\n this.text.attr({\n y: symbol.getBBox().height/2\n });\n\n this.group.push(symbol);\n symbol.insertBefore(this.text);\n this.symbol = symbol\n\n this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.textMargin;\n return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n var y = this.getY() + this.group.getBBox().height/2;\n var x = this.getX() + this.group.getBBox().width - this.textMargin;\n return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.inputoutput.js\n// module id = 11\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.operation.js\n// module id = 12\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n options = options || {};\n options.text = options.text || 'Start';\n Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n// if (this.next) {\n// var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n// var bottomPoint = this.getBottom();\n// var topPoint = this.next.getTop();\n\n// if (!this.next.isPositioned) {\n// this.next.shiftY(this.getY() + this.height + lineLength);\n// this.next.setX(bottomPoint.x - this.next.width/2);\n// this.next.isPositioned = true;\n\n// this.next.render();\n// }\n// }\n// };\n\n// Start.prototype.renderLines = function() {\n// if (this.next) {\n// this.drawLineTo(this.next);\n// }\n// };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.start.js\n// module id = 13\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n var symbol = chart.paper.rect(0, 0, 0, 0);\n options = options || {};\n Symbol.call(this, chart, options, symbol);\n\n symbol.attr({\n width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n });\n\n this.text.attr({\n 'x': 2 * this.getAttr('text-margin')\n });\n\n var innerWrap = chart.paper.rect(0, 0, 0, 0);\n innerWrap.attr({\n x: this.getAttr('text-margin'),\n stroke: this.getAttr('element-color'),\n 'stroke-width': this.getAttr('line-width'),\n width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n fill: this.getAttr('fill')\n });\n if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n var font = this.getAttr('font');\n var fontF = this.getAttr('font-family');\n var fontW = this.getAttr('font-weight');\n\n if (font) innerWrap.attr({ 'font': font });\n if (fontF) innerWrap.attr({ 'font-family': fontF });\n if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n if (options.link) { innerWrap.attr('href', options.link); }\n if (options.target) { innerWrap.attr('target', options.target); }\n this.group.push(innerWrap);\n innerWrap.insertBefore(this.text);\n\n this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.subroutine.js\n// module id = 14\n// module chunks = 0","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\n\t(function( $ ) {\n\t\tfunction paramFit(needle, haystack) {\n\t\t\treturn needle == haystack ||\n\t\t\t( Array.isArray(haystack) && (haystack.includes(needle) || haystack.includes(Number(needle)) ))\n\t\t}\n\t\tvar methods = {\n\t\t\tinit : function(options) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tthis.chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tthis.chart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t},\n\t\t\tsetFlowStateByParam : function(param, paramValue, newFlowState) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar chart = this.chart;\n\n\t\t\t\t\t// @todo this should be part of Symbol API\n\t\t\t\t\tvar nextSymbolKeys = ['next', 'yes', 'no', 'path1', 'path2', 'path3'];\n\n\t\t\t\t\tfor (var property in chart.symbols) {\n\t\t\t\t\t\tif (chart.symbols.hasOwnProperty(property)) {\n\t\t\t\t\t\t\tvar symbol = chart.symbols[property];\n\t\t\t\t\t\t\tvar val = symbol.params[param];\n\t\t\t\t\t\t\tif (paramFit(val, paramValue)) {\n\t\t\t\t\t\t\t\tsymbol.flowstate = newFlowState;\n\t\t\t\t\t\t\t\tfor (var nski = 0; nski < nextSymbolKeys.length; nski++) {\n\t\t\t\t\t\t\t\t\tvar nextSymbolKey = nextSymbolKeys[nski];\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey] &&\n\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey]['params'] &&\n\t\t\t\t\t\t\t\t\t\tsymbol[nextSymbolKey]['params'][param] &&\n\t\t\t\t\t\t\t\t\t\tparamFit(symbol[nextSymbolKey]['params'][param], paramValue)\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tsymbol.lineStyle[symbol[nextSymbolKey]['key']] = {stroke: chart.options()['flowstate'][newFlowState]['fill']};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tchart.clean();\n\t\t\t\t\tchart.drawSVG(this);\n\t\t\t\t});\n\n\t\t\t},\n\t\t\tclearFlowState: function () {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar chart = this.chart;\n\n\t\t\t\t\tfor (var property in chart.symbols) {\n\t\t\t\t\t\tif (chart.symbols.hasOwnProperty(property)) {\n\t\t\t\t\t\t\tvar node = chart.symbols[property];\n\t\t\t\t\t\t\tnode.flowstate = '';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tchart.clean();\n\t\t\t\t\tchart.drawSVG(this);\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\t$.fn.flowChart = function(methodOrOptions) {\n\t\t\tif ( methods[methodOrOptions] ) {\n\t\t\t\treturn methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 ));\n\t\t\t} else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ) {\n\t\t\t\t// Default to \"init\"\n\t\t\t\treturn methods.init.apply( this, arguments );\n\t\t\t} else {\n\t\t\t\t$.error( 'Method ' + methodOrOptions + ' does not exist on jQuery.flowChart' );\n\t\t\t}\n\t\t};\n\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/jquery-plugin.js\n// module id = 15\n// module chunks = 0","module.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"Raphael\"\n// module id = 16\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/releasenotes.md b/releasenotes.md index e518a93d..f8771bfb 100644 --- a/releasenotes.md +++ b/releasenotes.md @@ -1,3 +1,7 @@ +### v1.17.1 + +- fix start and end roundness introduced in [#227](https://github.com/adrai/flowchart.js/pull/227) + ### v1.17.0 - Styling to allow rounded corners [#227](https://github.com/adrai/flowchart.js/pull/227) diff --git a/site b/site index 86332233..3765677e 160000 --- a/site +++ b/site @@ -1 +1 @@ -Subproject commit 8633223351f901b510bddb0773c7d29e417380b2 +Subproject commit 3765677e84e09ed276bb4254ff459e0678f8af4e diff --git a/src/flowchart.defaults.js b/src/flowchart.defaults.js index a241db94..3e57ac2c 100644 --- a/src/flowchart.defaults.js +++ b/src/flowchart.defaults.js @@ -2,7 +2,7 @@ module.exports = { 'x': 0, 'y': 0, - 'roundness': 0, + // 'roundness': 0, 'line-width': 3, 'line-length': 50, 'text-margin': 10, diff --git a/src/flowchart.symbol.js b/src/flowchart.symbol.js index 0bae7511..7a01be98 100644 --- a/src/flowchart.symbol.js +++ b/src/flowchart.symbol.js @@ -83,8 +83,11 @@ function Symbol(chart, options, symbol) { }); symbol.node.setAttribute('class', this.getAttr('class')); - symbol.node.setAttribute('ry', this.getAttr('roundness')); - symbol.node.setAttribute('rx', this.getAttr('roundness')); + var roundness = this.getAttr('roundness'); + if (!isNaN(roundness)) { + symbol.node.setAttribute('ry', roundness); + symbol.node.setAttribute('rx', roundness); + } if (options.link) { symbol.attr('href', options.link); } if (options.target) { symbol.attr('target', options.target); } diff --git a/types/index.d.ts b/types/index.d.ts index fceb057f..76af8008 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -11,7 +11,7 @@ declare module "flowchart.js" { "line-color": string; "element-color": string; fill: string; - roundness: number; + roundness?: number; "yes-text": string; "no-text": string; "arrow-end": string; From c0f366147f8e69bf3607bc16c0c1419e38a018a6 Mon Sep 17 00:00:00 2001 From: Adriano Raiano Date: Tue, 1 Mar 2022 21:28:35 +0100 Subject: [PATCH 11/18] license is only in license file --- README.md | 22 ---------------------- license | 2 ++ 2 files changed, 2 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index ed29832d..ceb32c32 100644 --- a/README.md +++ b/README.md @@ -252,25 +252,3 @@ via [GitHub](https://github.com/adrai/flowchart.js/graphs/contributors) ## Thanks Many thanks to [js-sequence-diagrams](http://bramp.github.io/js-sequence-diagrams/) which greatly inspired this project, and forms the basis for the syntax. - -## Licence - -Copyright (c) 2021 Adriano Raiano - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The preceding copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/license b/license index e88d9ac6..3214e2fd 100644 --- a/license +++ b/license @@ -1,3 +1,5 @@ +The MIT License (MIT) + Copyright (c) 2022 Adriano Raiano Permission is hereby granted, free of charge, to any person obtaining a copy From bd8b6194b09bfa0ebcc17ba070921f3a99a2b596 Mon Sep 17 00:00:00 2001 From: Adriano Raiano Date: Tue, 27 Jun 2023 12:46:17 +0200 Subject: [PATCH 12/18] update site --- site | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site b/site index 3765677e..91455670 160000 --- a/site +++ b/site @@ -1 +1 @@ -Subproject commit 3765677e84e09ed276bb4254ff459e0678f8af4e +Subproject commit 91455670814ebce7997c212687b3da2114095123 From cb8dc9b1baf2e2785b5e095a4a779af5e63a31a1 Mon Sep 17 00:00:00 2001 From: dstang2000 Date: Sat, 9 Dec 2023 05:11:59 +0800 Subject: [PATCH 13/18] add node types: input and output (#251) * add node types: input and output * update readme * commit input.js --- README.md | 24 ++++++- imgs/example.svg | 2 +- imgs/input.png | Bin 0 -> 7252 bytes imgs/output.png | Bin 0 -> 7001 bytes src/flowchart.defaults.js | 2 + src/flowchart.parse.js | 9 +++ src/flowchart.symbol.input.js | 67 ++++++++++++++++++ src/flowchart.symbol.output.js | 124 +++++++++++++++++++++++++++++++++ 8 files changed, 225 insertions(+), 3 deletions(-) create mode 100644 imgs/input.png create mode 100644 imgs/output.png create mode 100644 src/flowchart.symbol.input.js create mode 100644 src/flowchart.symbol.output.js diff --git a/README.md b/README.md index ceb32c32..03849acf 100644 --- a/README.md +++ b/README.md @@ -12,15 +12,17 @@ Fine grain changes to node and connection style can also be made right in the DS ```flowchart st=>start: Start:>http://www.google.com[blank] e=>end:>http://www.google.com +getInfo=>input: Input Info op1=>operation: My Operation sub1=>subroutine: My Subroutine cond=>condition: Yes or No?:>http://www.google.com io=>inputoutput: catch something... +printInfo=>output: Print info para=>parallel: parallel tasks -st->op1->cond -cond(yes)->io->e +st->getInfo->op1->cond +cond(yes)->io->printInfo->e cond(no)->para para(path1, bottom)->sub1(right)->op1 para(path2, top)->op1 @@ -95,6 +97,24 @@ Indicates that IO happens in a flow. io=>inputoutput: inputoutput ``` +### input +Indicates that Input happens in a flow. + +![input image](imgs/input.png "input image") + +```flowchart +getInfo=>input: Input info +``` + +### output +Indicates that Output happens in a flow. + +![output image](imgs/output.png "output image") + +```flowchart +printInfo=>output: Print info +``` + ### subroutine Indicates that a subroutine happens in the flow and that there should be another flowchart that documents this subroutine. diff --git a/imgs/example.svg b/imgs/example.svg index e652353f..19096226 100644 --- a/imgs/example.svg +++ b/imgs/example.svg @@ -1 +1 @@ -Created with Raphaël 2.2.0StartMy OperationYesor No?catch something...Endparallel tasksMy Subroutineyesno \ No newline at end of file +Created with Raphaël 2.3.0StartInput InfoMy OperationYesor No?catch something...Print infoEndparallel tasksMy Subroutineyesno \ No newline at end of file diff --git a/imgs/input.png b/imgs/input.png new file mode 100644 index 0000000000000000000000000000000000000000..0fb8d314feaab3845178a7e748709eead79a95dd GIT binary patch literal 7252 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 HWE1r-AO~jm literal 0 HcmV?d00001 diff --git a/src/flowchart.defaults.js b/src/flowchart.defaults.js index 3e57ac2c..e10dac07 100644 --- a/src/flowchart.defaults.js +++ b/src/flowchart.defaults.js @@ -24,6 +24,8 @@ module.exports = { 'end': {}, 'condition': {}, 'inputoutput': {}, + 'input': {}, //tds + 'output': {}, //tds 'operation': {}, 'subroutine': {}, 'parallel': {} diff --git a/src/flowchart.parse.js b/src/flowchart.parse.js index 08514c94..03e941fa 100644 --- a/src/flowchart.parse.js +++ b/src/flowchart.parse.js @@ -3,10 +3,13 @@ var Start = require('./flowchart.symbol.start'); var End = require('./flowchart.symbol.end'); var Operation = require('./flowchart.symbol.operation'); var InputOutput = require('./flowchart.symbol.inputoutput'); +var Input = require('./flowchart.symbol.input'); //tds +var Output = require('./flowchart.symbol.output'); //tds var Subroutine = require('./flowchart.symbol.subroutine'); var Condition = require('./flowchart.symbol.condition'); var Parallel = require('./flowchart.symbol.parallel'); + function parse(input) { input = input || ''; input = input.trim(); @@ -43,6 +46,12 @@ function parse(input) { case 'inputoutput': dispSymbols[s.key] = new InputOutput(diagram, s); break; + case 'input': + dispSymbols[s.key] = new Input(diagram, s); //tds + break; + case 'output': + dispSymbols[s.key] = new Output(diagram, s); //tds + break; case 'subroutine': dispSymbols[s.key] = new Subroutine(diagram, s); break; diff --git a/src/flowchart.symbol.input.js b/src/flowchart.symbol.input.js new file mode 100644 index 00000000..6f5823dc --- /dev/null +++ b/src/flowchart.symbol.input.js @@ -0,0 +1,67 @@ +var Symbol = require('./flowchart.symbol'); +var inherits = require('./flowchart.helpers').inherits; +var drawAPI = require('./flowchart.functions'); +var drawPath = drawAPI.drawPath; + +function Input(chart, options) { + options = options || {}; + Symbol.call(this, chart, options); + this.textMargin = this.getAttr('text-margin'); + + this.text.attr({ + x: this.textMargin * 3 + }); + + var width = this.text.getBBox().width + 4 * this.textMargin; + var height = this.text.getBBox().height + 2 * this.textMargin; + var startX = this.textMargin; + var startY = height/2; + + var start = {x: startX, y: startY}; + var points = [ + {x: startX - this.textMargin + 2 * this.textMargin, y: height}, + {x: startX - this.textMargin + width, y: height}, + {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0}, + {x: startX - this.textMargin, y: 0}, + {x: startX, y: startY} + ]; + + var symbol = drawPath(chart, start, points); + + symbol.attr({ + stroke: this.getAttr('element-color'), + 'stroke-width': this.getAttr('line-width'), + fill: this.getAttr('fill') + }); + if (options.link) { symbol.attr('href', options.link); } + if (options.target) { symbol.attr('target', options.target); } + if (options.key) { symbol.node.id = options.key; } + symbol.node.setAttribute('class', this.getAttr('class')); + + this.text.attr({ + y: symbol.getBBox().height/2 + }); + + this.group.push(symbol); + symbol.insertBefore(this.text); + this.symbol = symbol + + this.initialize(); +} +inherits(Input, Symbol); + +Input.prototype.getLeft = function() { + var y = this.getY() + this.group.getBBox().height/2; + var x = this.getX() + this.textMargin; + return {x: x, y: y}; +}; + +Input.prototype.getRight = function() { + var y = this.getY() + this.group.getBBox().height/2; + var x = this.getX() + this.group.getBBox().width - this.textMargin; + return {x: x, y: y}; +}; + +module.exports = Input; + + diff --git a/src/flowchart.symbol.output.js b/src/flowchart.symbol.output.js new file mode 100644 index 00000000..363dac0b --- /dev/null +++ b/src/flowchart.symbol.output.js @@ -0,0 +1,124 @@ +var Symbol = require('./flowchart.symbol'); +var inherits = require('./flowchart.helpers').inherits; +var drawAPI = require('./flowchart.functions'); +var drawPath = drawAPI.drawPath; + +function Output(chart, options) { + options = options || {}; + Symbol.call(this, chart, options); + this.textMargin = this.getAttr('text-margin'); + + this.text.attr({ + x: this.textMargin * 3 + }); + + var width = this.text.getBBox().width + 4 * this.textMargin; + var height = this.text.getBBox().height + 2 * this.textMargin; + var startX = this.textMargin; + var startY = height/2; + + var start = {x: startX, y: startY}; + var points = [ + {x: startX - this.textMargin, y: height}, + {x: startX - this.textMargin + width + 2 * this.textMargin, y: height}, + {x: startX - this.textMargin + width, y: 0}, + {x: startX - this.textMargin + 2 * this.textMargin, y: 0}, + {x: startX, y: startY} + ]; + + var symbol = drawPath(chart, start, points); + + symbol.attr({ + stroke: this.getAttr('element-color'), + 'stroke-width': this.getAttr('line-width'), + fill: this.getAttr('fill') + }); + if (options.link) { symbol.attr('href', options.link); } + if (options.target) { symbol.attr('target', options.target); } + if (options.key) { symbol.node.id = options.key; } + symbol.node.setAttribute('class', this.getAttr('class')); + + this.text.attr({ + y: symbol.getBBox().height/2 + }); + + this.group.push(symbol); + symbol.insertBefore(this.text); + this.symbol = symbol + + this.initialize(); +} +inherits(Output, Symbol); + +Output.prototype.getLeft = function() { + var y = this.getY() + this.group.getBBox().height/2; + var x = this.getX() + this.textMargin; + return {x: x, y: y}; +}; + +Output.prototype.getRight = function() { + var y = this.getY() + this.group.getBBox().height/2; + var x = this.getX() + this.group.getBBox().width - this.textMargin; + return {x: x, y: y}; +}; + +module.exports = Output; + + + +/* +//var Symbol = require('./flowchart.symbol'); +var inherits = require('./flowchart.helpers').inherits; +var drawAPI = require('./flowchart.functions'); +var InputOutput = require('./flowchart.symbol.inputoutput'); +var drawPath = drawAPI.drawPath; + +function Output(chart, options) { + options = options || {}; + InputOutput.call(this, chart, options); + + var width = this.text.getBBox().width + 4 * this.textMargin; + var height = this.text.getBBox().height + 2 * this.textMargin; + var startX = this.textMargin; + var startY = height/2; + + var start = {x: startX, y: startY}; + var points = [ + {x: startX - this.textMargin + 2 * this.textMargin, y: height}, + {x: startX - this.textMargin + width, y: height}, + {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0}, + {x: startX - this.textMargin, y: 0}, + {x: startX, y: startY} + ]; + + var symbol = drawPath(chart, start, points); + + symbol.attr({ + stroke: this.getAttr('element-color'), + 'stroke-width': this.getAttr('line-width'), + fill: this.getAttr('fill') + }); + if (options.link) { symbol.attr('href', options.link); } + if (options.target) { symbol.attr('target', options.target); } + if (options.key) { symbol.node.id = options.key; } + symbol.node.setAttribute('class', this.getAttr('class')); + + this.text.attr({ + y: symbol.getBBox().height/2 + }); + + this.group.push(symbol); + symbol.insertBefore(this.text); + + if (this.symbol){ + this.group.remove(this.symbol); //tds + this.symbol.parentNode.removeChild(this.symbol); //tds + } + this.symbol = symbol + + this.initialize(); +} +inherits(Output, InputOutput); + +module.exports = Output; +*/ From 759e753dc97b5d1c5d401bd0fee65e2c0e461325 Mon Sep 17 00:00:00 2001 From: Adriano Raiano Date: Fri, 8 Dec 2023 22:26:10 +0100 Subject: [PATCH 14/18] prepare commit --- bower.json | 15 ---- index.html | 5 +- license | 2 +- release/flowchart.js | 146 ++++++++++++++++++++++++++++++++--- release/flowchart.js.map | 2 +- release/flowchart.min.js | 6 +- release/flowchart.min.js.map | 2 +- releasenotes.md | 4 + 8 files changed, 149 insertions(+), 33 deletions(-) delete mode 100644 bower.json diff --git a/bower.json b/bower.json deleted file mode 100644 index 5b82ba5d..00000000 --- a/bower.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "flowchart", - "version": "1.6.6", - "main": "./release/flowchart.min.js", - "dependencies": {}, - "ignore": [ - "src/", - "buildtasks/", - "example/", - ".gitignore", - "Gruntfile.js", - "package.json", - "**/*.zip" - ] -} diff --git a/index.html b/index.html index aae36316..eb057b41 100644 --- a/index.html +++ b/index.html @@ -18,6 +18,8 @@ c2=>condition: Good idea|rejected io=>inputoutput: catch something...|request para=>parallel: parallel tasks + in=>input: some in + out=>output: some out st->op1(right)->cond cond(yes, right)->c2 @@ -25,8 +27,9 @@ c2(true)->io->e c2(false)->e - para(path1, bottom)->sub1(left)->op1 + para(path1, left)->sub1(top)->op1 para(path2, right)->op2->e + para(path3, bottom)->in->out->e