From 5ef39573a7dc1cc9c01e4371a676cb850558f86c Mon Sep 17 00:00:00 2001 From: Adriano Raiano Date: Tue, 3 Jul 2018 22:04:08 +0200 Subject: [PATCH 01/66] try to optimize horizontal rendering for end symbols #155 --- package.json | 2 +- release/flowchart.js | 30 +++++++++++++++++++++--------- release/flowchart.js.map | 2 +- release/flowchart.min.js | 4 ++-- release/flowchart.min.js.map | 2 +- releasenotes.md | 4 ++++ src/flowchart.symbol.condition.js | 1 + src/flowchart.symbol.js | 2 ++ src/flowchart.symbol.parallel.js | 2 ++ 9 files changed, 35 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index c0cb3187..2019ea65 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "author": "adrai", "name": "flowchart.js", - "version": "1.11.2", + "version": "1.11.3", "main": "./index", "private": false, "engines": { diff --git a/release/flowchart.js b/release/flowchart.js index 0ce34e41..a347409e 100644 --- a/release/flowchart.js +++ b/release/flowchart.js @@ -1,4 +1,4 @@ -// flowchart.js, v1.11.2 +// flowchart.js, v1.11.3 // Copyright (c)2018 Adriano Raiano (adrai). // Distributed under MIT license // http://adrai.github.io/flowchart.js @@ -237,7 +237,10 @@ break; } } - hasSymbolUnder && (self.next.setX(symb.getX() + symb.width + lineLength), shift()); + if (hasSymbolUnder) { + if ("end" === self.next.symbolType) return; + self.next.setX(symb.getX() + symb.width + lineLength), shift(); + } }(), this.next.isPositioned = !0, this.next.render()); } else if ("left" === this.next_direction) { var leftPoint = this.getLeft(); @@ -251,7 +254,10 @@ break; } } - hasSymbolUnder && (self.next.setX(symb.getX() + symb.width + lineLength), shift()); + if (hasSymbolUnder) { + if ("end" === self.next.symbolType) return; + self.next.setX(symb.getX() + symb.width + lineLength), shift(); + } }(), this.next.isPositioned = !0, this.next.render()); } else { var bottomPoint = this.getBottom(); @@ -768,8 +774,10 @@ break; } } - hasSymbolUnder && (self.right_symbol.setX(symb.getX() + symb.width + lineLength), - shift()); + 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(); } } @@ -836,8 +844,10 @@ break; } } - hasSymbolUnder && (self.left_symbol.setX(symb.getX() + symb.width + lineLength), - shift()); + 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()); } if (this.right_symbol) { @@ -852,8 +862,10 @@ break; } } - hasSymbolUnder && (self.right_symbol.setX(symb.getX() + symb.width + lineLength), - shift()); + 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()); } }, Parallel.prototype.renderLines = function() { diff --git a/release/flowchart.js.map b/release/flowchart.js.map index 6e7b1311..3d9cba50 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 dda107c78c3d12105f77","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","next_direction","next","undefined","text","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","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","right","bottom","top","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","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","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getStyle","s","startIndex","endIndex","getSymbValue","getSymbol","getNextPath","flowSymb","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","flowSymbols","lenS","symbVal","realSymb","direction","condOpt","nextSymb","lineStyleSymbols","curSymb","JSON","textMargin","yes_direction","no_direction","direction_yes","direction_no","max","startX","startY","yes_symbol","no_symbol","bottom_symbol","right_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","left_symbol","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","minX","minY","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","$","fn","each","$this","html"],"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\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 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 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 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 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 lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\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 line = drawLine(this.chart, right, symbolLeft, text);\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 line = drawLine(this.chart, left, symbolRight, text);\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 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},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\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 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},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\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 if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\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},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\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 line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\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 line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\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 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},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\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 line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\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 line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\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 line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y},\n\t {x: diffX, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\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},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'top')) {\n\t line = drawLine(this.chart, top, [\n\t {x: top.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\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 var len;\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 len += 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\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 x += chart.options['text-margin']/2;\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': 'start',\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 };\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 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 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[0].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.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 // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\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 realSymb = getSymbol(flowSymb);\n\t var next = getNextPath(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 (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (i + 1 < lenS) {\n\t var nextSymb = flowSymbols[i + 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 i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n\t if ((i + 1) != lenS) {\n\t var curSymb = getSymbol(lineStyleSymbols[i]);\n\t var nextSymb = getSymbol(lineStyleSymbols[i+1]);\n\t\n\t curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i + 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/* 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.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t this.params = options.params;\n\t if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n\t if (options.direction_yes === 'right') {\n\t this.no_direction = 'bottom';\n\t this.yes_direction = 'right';\n\t } else if (options.direction_yes === 'top') {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'top';\n\t } else {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n\t if (options.direction_no === 'right') {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t } else {\n\t this.yes_direction = 'right';\n\t this.no_direction = 'bottom';\n\t }\n\t } else if (options.yes && options.direction_yes && options.no && options.direction_no && options.direction_no !== options.direction_yes) {\n\t if (options.direction_yes === 'right') {\n\t this.no_direction = 'bottom';\n\t this.yes_direction = 'right';\n\t } else if (options.direction_yes === 'top') {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'top';\n\t } else {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\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 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\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, 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.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 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 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 x = symbol.getX() + symbol.width;\n\t y = symbol.getY() + symbol.height;\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.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\t(function( $ ) {\n\t\t\t$.fn.flowChart = function( options ) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tchart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\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 dda107c78c3d12105f77","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\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 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 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 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 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 lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n line = drawLine(this.chart, right, symbolLeft, text);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n line = drawLine(this.chart, left, symbolRight, text);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\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},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\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},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\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},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\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 line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\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 line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\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 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},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\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 line = drawLine(this.chart, left, [\n {x: diffX, y: left.y},\n {x: diffX, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\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},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'top')) {\n line = drawLine(this.chart, top, [\n {x: top.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\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 var len;\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 len += 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\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 x += chart.options['text-margin']/2;\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': 'start',\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 };\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 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 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[0].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.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 // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\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 realSymb = getSymbol(flowSymb);\n var next = getNextPath(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 (!chart.start) {\n chart.start = realSymb;\n }\n\n if (i + 1 < lenS) {\n var nextSymb = flowSymbols[i + 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 i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n if ((i + 1) != lenS) {\n var curSymb = getSymbol(lineStyleSymbols[i]);\n var nextSymb = getSymbol(lineStyleSymbols[i+1]);\n\n curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i + 1]));\n }\n }\n }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\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.textMargin = this.getAttr('text-margin');\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n this.params = options.params;\n if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n if (options.direction_yes === 'right') {\n this.no_direction = 'bottom';\n this.yes_direction = 'right';\n } else if (options.direction_yes === 'top') {\n this.no_direction = 'right';\n this.yes_direction = 'top';\n } else {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n if (options.direction_no === 'right') {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n } else {\n this.yes_direction = 'right';\n this.no_direction = 'bottom';\n }\n } else if (options.yes && options.direction_yes && options.no && options.direction_no && options.direction_no !== options.direction_yes) {\n if (options.direction_yes === 'right') {\n this.no_direction = 'bottom';\n this.yes_direction = 'right';\n } else if (options.direction_yes === 'top') {\n this.no_direction = 'right';\n this.yes_direction = 'top';\n } else {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\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 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\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, 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 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 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 x = symbol.getX() + symbol.width;\n y = symbol.getY() + symbol.height;\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.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\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\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 b37b19315d17d041d426","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","next_direction","next","undefined","text","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","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","right","bottom","top","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","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","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getStyle","s","startIndex","endIndex","getSymbValue","getSymbol","getNextPath","flowSymb","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","flowSymbols","lenS","symbVal","realSymb","direction","condOpt","nextSymb","lineStyleSymbols","curSymb","JSON","textMargin","yes_direction","no_direction","direction_yes","direction_no","max","startX","startY","yes_symbol","no_symbol","bottom_symbol","right_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","left_symbol","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","minX","minY","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","$","fn","each","$this","html"],"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\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 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 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 lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\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 line = drawLine(this.chart, right, symbolLeft, text);\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 line = drawLine(this.chart, left, symbolRight, text);\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 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},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\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 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},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\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 if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\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},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\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 line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\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 line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\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 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},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\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 line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\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 line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\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 line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y},\n\t {x: diffX, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\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},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'top')) {\n\t line = drawLine(this.chart, top, [\n\t {x: top.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\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 var len;\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 len += 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\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 x += chart.options['text-margin']/2;\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': 'start',\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 };\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 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 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[0].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.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 // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\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 realSymb = getSymbol(flowSymb);\n\t var next = getNextPath(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 (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (i + 1 < lenS) {\n\t var nextSymb = flowSymbols[i + 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 i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n\t if ((i + 1) != lenS) {\n\t var curSymb = getSymbol(lineStyleSymbols[i]);\n\t var nextSymb = getSymbol(lineStyleSymbols[i+1]);\n\t\n\t curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i + 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/* 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.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t this.params = options.params;\n\t if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n\t if (options.direction_yes === 'right') {\n\t this.no_direction = 'bottom';\n\t this.yes_direction = 'right';\n\t } else if (options.direction_yes === 'top') {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'top';\n\t } else {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n\t if (options.direction_no === 'right') {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t } else {\n\t this.yes_direction = 'right';\n\t this.no_direction = 'bottom';\n\t }\n\t } else if (options.yes && options.direction_yes && options.no && options.direction_no && options.direction_no !== options.direction_yes) {\n\t if (options.direction_yes === 'right') {\n\t this.no_direction = 'bottom';\n\t this.yes_direction = 'right';\n\t } else if (options.direction_yes === 'top') {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'top';\n\t } else {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\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\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, 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.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 x = symbol.getX() + symbol.width;\n\t y = symbol.getY() + symbol.height;\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.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\t(function( $ ) {\n\t\t\t$.fn.flowChart = function( options ) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tchart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\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 b37b19315d17d041d426","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\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 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 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 lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n line = drawLine(this.chart, right, symbolLeft, text);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n line = drawLine(this.chart, left, symbolRight, text);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\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},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\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},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\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},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\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 line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\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 line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\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 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},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\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 line = drawLine(this.chart, left, [\n {x: diffX, y: left.y},\n {x: diffX, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\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},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'top')) {\n line = drawLine(this.chart, top, [\n {x: top.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\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 var len;\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 len += 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\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 x += chart.options['text-margin']/2;\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': 'start',\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 };\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 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 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[0].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.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 // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\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 realSymb = getSymbol(flowSymb);\n var next = getNextPath(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 (!chart.start) {\n chart.start = realSymb;\n }\n\n if (i + 1 < lenS) {\n var nextSymb = flowSymbols[i + 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 i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n if ((i + 1) != lenS) {\n var curSymb = getSymbol(lineStyleSymbols[i]);\n var nextSymb = getSymbol(lineStyleSymbols[i+1]);\n\n curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i + 1]));\n }\n }\n }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\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.textMargin = this.getAttr('text-margin');\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n this.params = options.params;\n if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n if (options.direction_yes === 'right') {\n this.no_direction = 'bottom';\n this.yes_direction = 'right';\n } else if (options.direction_yes === 'top') {\n this.no_direction = 'right';\n this.yes_direction = 'top';\n } else {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n if (options.direction_no === 'right') {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n } else {\n this.yes_direction = 'right';\n this.no_direction = 'bottom';\n }\n } else if (options.yes && options.direction_yes && options.no && options.direction_no && options.direction_no !== options.direction_yes) {\n if (options.direction_yes === 'right') {\n this.no_direction = 'bottom';\n this.yes_direction = 'right';\n } else if (options.direction_yes === 'top') {\n this.no_direction = 'right';\n this.yes_direction = 'top';\n } else {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\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\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, 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 x = symbol.getX() + symbol.width;\n y = symbol.getY() + symbol.height;\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.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\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\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 6d3cb2e4..89260a0a 100644 --- a/release/flowchart.min.js +++ b/release/flowchart.min.js @@ -1,7 +1,7 @@ -// flowchart.js, v1.11.2 +// flowchart.js, v1.11.3 // Copyright (c)2018 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 r in e)("object"==typeof exports?exports:t)[r]=e[r]}}(this,function(t){return function(t){function i(r){if(e[r])return e[r].exports;var s=e[r]={exports:{},id:r,loaded:!1};return t[r].call(s.exports,s,s.exports,i),s.loaded=!0,s.exports}var e={};return i.m=t,i.c=e,i.p="",i(0)}([function(t,i,e){e(9);var r=e(4);e(15);var s={parse:r};"undefined"!=typeof window&&(window.flowchart=s),t.exports=s},function(t,i){function e(t,i){if(!t||"function"==typeof t)return i;var r={};for(var s in i)r[s]=i[s];for(s in t)t[s]&&("object"==typeof r[s]?r[s]=e(r[s],t[s]):r[s]=t[s]);return r}function r(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:r}},function(t,i,e){function r(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.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 r=this.getAttr("font"),s=this.getAttr("font-family"),o=this.getAttr("font-weight");r&&this.text.attr({font:r}),s&&this.text.attr({"font-family":s}),o&&this.text.attr({"font-weight":o}),i.link&&this.text.attr("href",i.link),i.target&&this.text.attr("target",i.target);var h=this.getAttr("maxWidth");if(h){for(var n=i.text.split(" "),a="",l=0,p=n.length;lh?"\n"+x:" "+x}this.text.attr("text",a.substring(1))}if(this.group.push(this.text),e){var y=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*y,height:this.text.getBBox().height+2*y}),e.node.setAttribute("class",this.getAttr("class")),i.link&&e.attr("href",i.link),i.target&&e.attr("target",i.target),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 s=e(3),o=s.drawLine,h=s.checkLineIntersection;r.prototype.getAttr=function(t){if(this.chart){var i,e=this.chart.options?this.chart.options[t]:void 0,r=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||r||e}},r.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},r.prototype.getCenter=function(){return{x:this.getX()+this.width/2,y:this.getY()+this.height/2}},r.prototype.getX=function(){return this.group.getBBox().x},r.prototype.getY=function(){return this.group.getBBox().y},r.prototype.shiftX=function(t){this.group.transform("t"+(this.getX()+t)+","+this.getY())},r.prototype.setX=function(t){this.group.transform("t"+t+","+this.getY())},r.prototype.shiftY=function(t){this.group.transform("t"+this.getX()+","+(this.getY()+t))},r.prototype.setY=function(t){this.group.transform("t"+this.getX()+","+t)},r.prototype.getTop=function(){var t=this.getY(),i=this.getX()+this.width/2;return{x:i,y:t}},r.prototype.getBottom=function(){var t=this.getY()+this.height,i=this.getX()+this.width/2;return{x:i,y:t}},r.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX();return{x:i,y:t}},r.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width;return{x:i,y:t}},r.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 r,s=!1,o=0,h=t.chart.symbols.length;ot.next.getCenter().y&&n<=t.next.width/2){s=!0;break}}s&&(t.next.setX(r.getX()+r.width+i),e())}(),this.next.isPositioned=!0,this.next.render())}else if("left"===this.next_direction){var r=this.getLeft();this.next.isPositioned||(this.next.setY(r.y-this.next.height/2),this.next.shiftX(-(this.group.getBBox().x+this.width+i)),function e(){for(var r,s=!1,o=0,h=t.chart.symbols.length;ot.next.getCenter().y&&n<=t.next.width/2){s=!0;break}}s&&(t.next.setX(r.getX()+r.width+i),e())}(),this.next.isPositioned=!0,this.next.render())}else{var s=this.getBottom();this.next.isPositioned||(this.next.shiftY(this.getY()+this.height+i),this.next.setX(s.x-this.next.width/2),this.next.isPositioned=!0,this.next.render())}}},r.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")||""))},r.prototype.drawLineTo=function(t,i,e){this.connectedTo.indexOf(t)<0&&this.connectedTo.push(t);var r,s=this.getCenter().x,n=this.getCenter().y,a=this.getRight(),l=this.getBottom(),p=this.getTop(),x=this.getLeft(),y=t.getCenter().x,g=t.getCenter().y,c=t.getTop(),f=t.getRight(),d=t.getLeft(),m=s===y,u=n===g,b=ng||this===t,v=s>y,w=sk&&(k=c.x);else r=this.leftEnd&&_?o(this.chart,l,[{x:l.x,y:l.y+B/2},{x:l.x+(l.x-c.x)/2,y:l.y+B/2},{x:l.x+(l.x-c.x)/2,y:c.y-B/2},{x:c.x,y:c.y-B/2},{x:c.x,y:c.y}],i):o(this.chart,l,[{x:l.x,y:c.y-B/2},{x:c.x,y:c.y-B/2},{x:c.x,y:c.y}],i),this.bottomStart=!0,t.topEnd=!0,k=l.x+(l.x-c.x)/2;else r=o(this.chart,a,[{x:a.x+B/2,y:a.y},{x:a.x+B/2,y:c.y-B/2},{x:c.x,y:c.y-B/2},{x:c.x,y:c.y}],i),this.rightStart=!0,t.topEnd=!0,k=a.x+B/2;else r=o(this.chart,a,[{x:a.x+B/2,y:a.y},{x:a.x+B/2,y:c.y-B/2},{x:c.x,y:c.y-B/2},{x:c.x,y:c.y}],i),this.rightStart=!0,t.topEnd=!0,k=a.x+B/2;else r=o(this.chart,x,f,i),this.leftStart=!0,t.rightEnd=!0,k=f.x;else r=o(this.chart,a,d,i),this.rightStart=!0,t.leftEnd=!0,k=d.x;else r=o(this.chart,l,c,i),this.bottomStart=!0,t.topEnd=!0,k=l.x;if(this.lineStyle[t.key]&&r&&r.attr(this.lineStyle[t.key]),r){for(var O=0,L=this.chart.lines.length;OG?($=["L",J.x+2*A,q],T.splice(I+1,0,$),$=["C",J.x+2*A,q,J.x,q-4*A,J.x-2*A,q],T.splice(I+2,0,$),r.attr("path",T)):($=["L",J.x-2*A,q],T.splice(I+1,0,$),$=["C",J.x-2*A,q,J.x,q-4*A,J.x+2*A,q],T.splice(I+2,0,$),r.attr("path",T)):q>Q?($=["L",V,J.y+2*A],T.splice(I+1,0,$),$=["C",V,J.y+2*A,V+4*A,J.y,V,J.y-2*A],T.splice(I+2,0,$),r.attr("path",T)):($=["L",V,J.y-2*A],T.splice(I+1,0,$),$=["C",V,J.y-2*A,V+4*A,J.y,V,J.y+2*A],T.splice(I+2,0,$),r.attr("path",T)),I+=2,M+=2}}}this.chart.lines.push(r),(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=r},function(t,i){function e(t,i,e){var r,s,o="M{0},{1}";for(r=2,s=2*e.length+2;rf.x?i.x-(i.x-f.x)/2:f.x-(f.x-i.x)/2,m=i.y>f.y?i.y-(i.y-f.y)/2:f.y-(f.y-i.y)/2,c?(d-=g.getBBox().width/2,m-=t.options["text-margin"]):(d+=t.options["text-margin"],m-=g.getBBox().height/2)):(d=i.x,m=i.y,c?(d+=t.options["text-margin"]/2,m-=t.options["text-margin"]):(d+=t.options["text-margin"]/2,m+=t.options["text-margin"],i.y>f.y&&(m-=2*t.options["text-margin"]))),g.attr({"text-anchor":"start","font-size":t.options["font-size"],fill:t.options["font-color"],x:d,y:m}),l&&g.attr({font:l}),p&&g.attr({"font-family":p}),x&&g.attr({"font-weight":x})}return a}function s(t,i,e,r,s,o,h,n){var a,l,p,x,y,g={x:null,y:null,onLine1:!1,onLine2:!1};return a=(n-o)*(e-t)-(h-s)*(r-i),0===a?g:(l=i-o,p=t-s,x=(h-s)*l-(n-o)*p,y=(e-t)*l-(r-i)*p,l=x/a,p=y/a,g.x=t+l*(e-t),g.y=i+l*(r-i),l>0&&l<1&&(g.onLine1=!0),p>0&&p<1&&(g.onLine2=!0),g)}t.exports={drawPath:e,drawLine:r,checkLineIntersection:s}},function(t,i,e){function r(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 r(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?g.symbols[t.substring(0,i-1)]:g.symbols[t]}function y(t){var i="next",e=t.indexOf("(")+1,r=t.indexOf(")");return e>=0&&r>=0&&(i=E.substring(e,r),i.indexOf(",")<0&&"yes"!==i&&"no"!==i&&(i="next, "+i)),i}t=t||"",t=t.trim();for(var g={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(y,t);break;case"end":g[t.key]=new h(y,t);break;case"operation":g[t.key]=new n(y,t);break;case"inputoutput":g[t.key]=new a(y,t);break;case"subroutine":g[t.key]=new l(y,t);break;case"condition":g[t.key]=new p(y,t);break;case"parallel":g[t.key]=new x(y,t);break;default:return new Error("Wrong symbol type!")}return g[t.key]}var r=this;this.diagram&&this.diagram.clean();var y=new s(t,i);this.diagram=y;var g={};!function t(i,s,o){var h=e(i);return r.start===i?y.startWith(h):s&&o&&!s.pathOk&&(s instanceof p?(o.yes===i&&s.yes(h),o.no===i&&s.no(h)):s instanceof x?(o.path1===i&&s.path1(h),o.path2===i&&s.path2(h),o.path3===i&&s.path3(h)):s.then(h)),h.pathOk?h:(h instanceof p?(i.yes&&t(i.yes,h,i),i.no&&t(i.no,h,i)):h instanceof x?(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),y.render()},clean:function(){this.diagram.clean()}},c=[],f=0,d=1,m=t.length;d")<0&&v.indexOf("=>")<0&&v.indexOf("@>")<0?(c[b-1]+="\n"+v,c.splice(b,1),_--):b++}for(;c.length>0;){var w=c.splice(0,1)[0].trim();if(w.indexOf("=>")>=0){var k=w.split("=>"),B={key:k[0].replace(/\(.*\)/,""),symbolType:k[1],text:null,link:null,target:null,flowstate:null,lineStyle:{},params:{}},A=k[0].match(/\((.*)\)/);if(A&&A.length>1)for(var X=A[1].split(","),O=0;O=0&&(M=B.symbolType.split(": "),B.symbolType=M.shift(),B.text=M.join(": ")),B.text&&B.text.indexOf(":>")>=0?(M=B.text.split(":>"),B.text=M.shift(),B.link=M.join(":>")):B.symbolType.indexOf(":>")>=0&&(M=B.symbolType.split(":>"),B.symbolType=M.shift(),B.link=M.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 T=B.text.split("|");B.flowstate=T.pop().trim(),B.text=T.join("|")}g.symbols[B.key]=B}else if(w.indexOf("->")>=0)for(var Y=w.split("->"),O=0,P=Y.length;O=0){var I=R.split(",");R=I[0],F=I[1].trim()}if(g.start||(g.start=z),O+1")>=0)for(var W=w.split("@>"),O=0,P=W.length;Or.right_symbol.getCenter().y&&n<=r.right_symbol.width/2){s=!0;break}}s&&(r.right_symbol.setX(e.getX()+e.width+t),i())}(),this.right_symbol.isPositioned=!0,this.right_symbol.render()}}},r.prototype.renderLines=function(){this.yes_symbol&&this.drawLineTo(this.yes_symbol,this.getAttr("yes-text"),this.yes_direction),this.no_symbol&&this.drawLineTo(this.no_symbol,this.getAttr("no-text"),this.no_direction)},t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.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 s=e(2),o=e(1).inherits;o(r,s),r.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 r=this;if(this.left_symbol){var s=this.getLeft();this.left_symbol.isPositioned||(this.left_symbol.setY(s.y-this.left_symbol.height/2),this.left_symbol.shiftX(-(this.group.getBBox().x+this.width+t)),function i(){for(var e,s=!1,o=0,h=r.chart.symbols.length;or.left_symbol.getCenter().y&&n<=r.left_symbol.width/2){s=!0;break}}s&&(r.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,s=!1,o=0,h=r.chart.symbols.length;or.right_symbol.getCenter().y&&n<=r.right_symbol.width/2){s=!0;break}}s&&(r.right_symbol.setX(e.getX()+e.width+t),i())}(),this.right_symbol.isPositioned=!0,this.right_symbol.render())}},r.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=r},function(t,i,e){function r(t,i){i=i||{},this.paper=new s(t),this.options=o(i,h),this.symbols=[],this.lines=[],this.start=null}var s=e(16),o=e(1).defaults,h=e(8),n=e(5),a=e(6);r.prototype.handle=function(t){this.symbols.indexOf(t)<=-1&&this.symbols.push(t);var i=this;return t instanceof n?(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},r.prototype.startWith=function(t){return this.start=t,this.handle(t)},r.prototype.render=function(){var t,i,e=0,r=0,s=0,o=0,h=0,n=0,a=0,l=0;for(s=0,o=this.symbols.length;se&&(e=t.width),t.height>r&&(r=t.height);for(s=0,o=this.symbols.length;sh&&(h=p),x>n&&(n=x);for(s=0,o=this.lines.length;sh&&(h=y),g>n&&(n=g)}var c=this.options.scale,f=this.options["line-width"];this.minXFromSymbols>>0;if(0===e)return-1;var r=0;if(arguments.length>0&&(r=Number(arguments[1]),r!=r?r=0:0!==r&&r!=1/0&&r!=-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r)))),r>=e)return-1;for(var s=r>=0?r:Math.max(e-Math.abs(r),0);s>>0;if(0===e)return-1;var r=e;arguments.length>1&&(r=Number(arguments[1]),r!=r?r=0:0!==r&&r!=1/0&&r!=-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r))));for(var s=r>=0?Math.min(r,e-1):e-Math.abs(r);s>=0;s--)if(s in i&&i[s]===t)return s;return-1}),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")})},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"End",s.call(this,t,i,e)}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){function r(t,i){i=i||{},s.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,r=this.text.getBBox().height+2*this.textMargin,o=this.textMargin,h=r/2,a={x:o,y:h},l=[{x:o-this.textMargin,y:r},{x:o-this.textMargin+e,y:r},{x:o-this.textMargin+e+2*this.textMargin,y:0},{x:o-this.textMargin+2*this.textMargin,y:0},{x:o,y:h}],p=n(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 s=e(2),o=e(1).inherits,h=e(3),n=h.drawPath;o(r,s),r.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.textMargin;return{x:i,y:t}},r.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=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.call(this,t,i,e)}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"Start",s.call(this,t,i,e)}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.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 r=t.paper.rect(0,0,0,0);r.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&&(r.node.id=i.key+"i");var o=this.getAttr("font"),h=this.getAttr("font-family"),n=this.getAttr("font-weight");o&&r.attr({font:o}),h&&r.attr({"font-family":h}),n&&r.attr({"font-weight":n}),i.link&&r.attr("href",i.link),i.target&&r.attr("target",i.target),this.group.push(r),r.insertBefore(this.text),this.initialize()}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){if("undefined"!=typeof jQuery){var r=e(4);!function(t){t.fn.flowChart=function(i){return this.each(function(){var e=t(this),s=r(e.text());e.html(""),s.drawSVG(this,i)})}}(jQuery)}},function(i,e){i.exports=t}])}); +!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 r in e)("object"==typeof exports?exports:t)[r]=e[r]}}(this,function(t){return function(t){function i(r){if(e[r])return e[r].exports;var s=e[r]={exports:{},id:r,loaded:!1};return t[r].call(s.exports,s,s.exports,i),s.loaded=!0,s.exports}var e={};return i.m=t,i.c=e,i.p="",i(0)}([function(t,i,e){e(9);var r=e(4);e(15);var s={parse:r};"undefined"!=typeof window&&(window.flowchart=s),t.exports=s},function(t,i){function e(t,i){if(!t||"function"==typeof t)return i;var r={};for(var s in i)r[s]=i[s];for(s in t)t[s]&&("object"==typeof r[s]?r[s]=e(r[s],t[s]):r[s]=t[s]);return r}function r(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:r}},function(t,i,e){function r(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.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 r=this.getAttr("font"),s=this.getAttr("font-family"),o=this.getAttr("font-weight");r&&this.text.attr({font:r}),s&&this.text.attr({"font-family":s}),o&&this.text.attr({"font-weight":o}),i.link&&this.text.attr("href",i.link),i.target&&this.text.attr("target",i.target);var h=this.getAttr("maxWidth");if(h){for(var n=i.text.split(" "),a="",l=0,p=n.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.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 s=e(3),o=s.drawLine,h=s.checkLineIntersection;r.prototype.getAttr=function(t){if(this.chart){var i,e=this.chart.options?this.chart.options[t]:void 0,r=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||r||e}},r.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},r.prototype.getCenter=function(){return{x:this.getX()+this.width/2,y:this.getY()+this.height/2}},r.prototype.getX=function(){return this.group.getBBox().x},r.prototype.getY=function(){return this.group.getBBox().y},r.prototype.shiftX=function(t){this.group.transform("t"+(this.getX()+t)+","+this.getY())},r.prototype.setX=function(t){this.group.transform("t"+t+","+this.getY())},r.prototype.shiftY=function(t){this.group.transform("t"+this.getX()+","+(this.getY()+t))},r.prototype.setY=function(t){this.group.transform("t"+this.getX()+","+t)},r.prototype.getTop=function(){var t=this.getY(),i=this.getX()+this.width/2;return{x:i,y:t}},r.prototype.getBottom=function(){var t=this.getY()+this.height,i=this.getX()+this.width/2;return{x:i,y:t}},r.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX();return{x:i,y:t}},r.prototype.getRight=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.group.getBBox().width;return{x:i,y:t}},r.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 r,s=!1,o=0,h=t.chart.symbols.length;ot.next.getCenter().y&&n<=t.next.width/2){s=!0;break}}if(s){if("end"===t.next.symbolType)return;t.next.setX(r.getX()+r.width+i),e()}}(),this.next.isPositioned=!0,this.next.render())}else if("left"===this.next_direction){var r=this.getLeft();this.next.isPositioned||(this.next.setY(r.y-this.next.height/2),this.next.shiftX(-(this.group.getBBox().x+this.width+i)),function e(){for(var r,s=!1,o=0,h=t.chart.symbols.length;ot.next.getCenter().y&&n<=t.next.width/2){s=!0;break}}if(s){if("end"===t.next.symbolType)return;t.next.setX(r.getX()+r.width+i),e()}}(),this.next.isPositioned=!0,this.next.render())}else{var s=this.getBottom();this.next.isPositioned||(this.next.shiftY(this.getY()+this.height+i),this.next.setX(s.x-this.next.width/2),this.next.isPositioned=!0,this.next.render())}}},r.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")||""))},r.prototype.drawLineTo=function(t,i,e){this.connectedTo.indexOf(t)<0&&this.connectedTo.push(t);var r,s=this.getCenter().x,n=this.getCenter().y,a=this.getRight(),l=this.getBottom(),p=this.getTop(),y=this.getLeft(),x=t.getCenter().x,g=t.getCenter().y,c=t.getTop(),f=t.getRight(),d=t.getLeft(),m=s===x,u=n===g,b=ng||this===t,v=s>x,w=sk&&(k=c.x);else r=this.leftEnd&&_?o(this.chart,l,[{x:l.x,y:l.y+B/2},{x:l.x+(l.x-c.x)/2,y:l.y+B/2},{x:l.x+(l.x-c.x)/2,y:c.y-B/2},{x:c.x,y:c.y-B/2},{x:c.x,y:c.y}],i):o(this.chart,l,[{x:l.x,y:c.y-B/2},{x:c.x,y:c.y-B/2},{x:c.x,y:c.y}],i),this.bottomStart=!0,t.topEnd=!0,k=l.x+(l.x-c.x)/2;else r=o(this.chart,a,[{x:a.x+B/2,y:a.y},{x:a.x+B/2,y:c.y-B/2},{x:c.x,y:c.y-B/2},{x:c.x,y:c.y}],i),this.rightStart=!0,t.topEnd=!0,k=a.x+B/2;else r=o(this.chart,a,[{x:a.x+B/2,y:a.y},{x:a.x+B/2,y:c.y-B/2},{x:c.x,y:c.y-B/2},{x:c.x,y:c.y}],i),this.rightStart=!0,t.topEnd=!0,k=a.x+B/2;else r=o(this.chart,y,f,i),this.leftStart=!0,t.rightEnd=!0,k=f.x;else r=o(this.chart,a,d,i),this.rightStart=!0,t.leftEnd=!0,k=d.x;else r=o(this.chart,l,c,i),this.bottomStart=!0,t.topEnd=!0,k=l.x;if(this.lineStyle[t.key]&&r&&r.attr(this.lineStyle[t.key]),r){for(var O=0,L=this.chart.lines.length;OG?($=["L",J.x+2*A,q],C.splice(I+1,0,$),$=["C",J.x+2*A,q,J.x,q-4*A,J.x-2*A,q],C.splice(I+2,0,$),r.attr("path",C)):($=["L",J.x-2*A,q],C.splice(I+1,0,$),$=["C",J.x-2*A,q,J.x,q-4*A,J.x+2*A,q],C.splice(I+2,0,$),r.attr("path",C)):q>Q?($=["L",V,J.y+2*A],C.splice(I+1,0,$),$=["C",V,J.y+2*A,V+4*A,J.y,V,J.y-2*A],C.splice(I+2,0,$),r.attr("path",C)):($=["L",V,J.y-2*A],C.splice(I+1,0,$),$=["C",V,J.y-2*A,V+4*A,J.y,V,J.y+2*A],C.splice(I+2,0,$),r.attr("path",C)),I+=2,M+=2}}}this.chart.lines.push(r),(void 0===this.chart.minXFromSymbols||this.chart.minXFromSymbols>y.x)&&(this.chart.minXFromSymbols=y.x)}(!this.chart.maxXFromLine||this.chart.maxXFromLine&&k>this.chart.maxXFromLine)&&(this.chart.maxXFromLine=k)},t.exports=r},function(t,i){function e(t,i,e){var r,s,o="M{0},{1}";for(r=2,s=2*e.length+2;rf.x?i.x-(i.x-f.x)/2:f.x-(f.x-i.x)/2,m=i.y>f.y?i.y-(i.y-f.y)/2:f.y-(f.y-i.y)/2,c?(d-=g.getBBox().width/2,m-=t.options["text-margin"]):(d+=t.options["text-margin"],m-=g.getBBox().height/2)):(d=i.x,m=i.y,c?(d+=t.options["text-margin"]/2,m-=t.options["text-margin"]):(d+=t.options["text-margin"]/2,m+=t.options["text-margin"],i.y>f.y&&(m-=2*t.options["text-margin"]))),g.attr({"text-anchor":"start","font-size":t.options["font-size"],fill:t.options["font-color"],x:d,y:m}),l&&g.attr({font:l}),p&&g.attr({"font-family":p}),y&&g.attr({"font-weight":y})}return a}function s(t,i,e,r,s,o,h,n){var a,l,p,y,x,g={x:null,y:null,onLine1:!1,onLine2:!1};return a=(n-o)*(e-t)-(h-s)*(r-i),0===a?g:(l=i-o,p=t-s,y=(h-s)*l-(n-o)*p,x=(e-t)*l-(r-i)*p,l=y/a,p=x/a,g.x=t+l*(e-t),g.y=i+l*(r-i),l>0&&l<1&&(g.onLine1=!0),p>0&&p<1&&(g.onLine2=!0),g)}t.exports={drawPath:e,drawLine:r,checkLineIntersection:s}},function(t,i,e){function r(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 r(t){var i=t.indexOf("(")+1,e=t.indexOf(")");return i>=0&&e>=0?g.symbols[t.substring(0,i-1)]:g.symbols[t]}function x(t){var i="next",e=t.indexOf("(")+1,r=t.indexOf(")");return e>=0&&r>=0&&(i=E.substring(e,r),i.indexOf(",")<0&&"yes"!==i&&"no"!==i&&(i="next, "+i)),i}t=t||"",t=t.trim();for(var g={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 n(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 r=this;this.diagram&&this.diagram.clean();var x=new s(t,i);this.diagram=x;var g={};!function t(i,s,o){var h=e(i);return r.start===i?x.startWith(h):s&&o&&!s.pathOk&&(s instanceof p?(o.yes===i&&s.yes(h),o.no===i&&s.no(h)):s instanceof y?(o.path1===i&&s.path1(h),o.path2===i&&s.path2(h),o.path3===i&&s.path3(h)):s.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()}},c=[],f=0,d=1,m=t.length;d")<0&&v.indexOf("=>")<0&&v.indexOf("@>")<0?(c[b-1]+="\n"+v,c.splice(b,1),_--):b++}for(;c.length>0;){var w=c.splice(0,1)[0].trim();if(w.indexOf("=>")>=0){var k=w.split("=>"),B={key:k[0].replace(/\(.*\)/,""),symbolType:k[1],text:null,link:null,target:null,flowstate:null,lineStyle:{},params:{}},A=k[0].match(/\((.*)\)/);if(A&&A.length>1)for(var X=A[1].split(","),O=0;O=0&&(M=B.symbolType.split(": "),B.symbolType=M.shift(),B.text=M.join(": ")),B.text&&B.text.indexOf(":>")>=0?(M=B.text.split(":>"),B.text=M.shift(),B.link=M.join(":>")):B.symbolType.indexOf(":>")>=0&&(M=B.symbolType.split(":>"),B.symbolType=M.shift(),B.link=M.join(":>")),B.symbolType.indexOf("\n")>=0&&(B.symbolType=B.symbolType.split("\n")[0]),B.link){var T=B.link.indexOf("[")+1,S=B.link.indexOf("]");T>=0&&S>=0&&(B.target=B.link.substring(T,S),B.link=B.link.substring(0,T-1))}if(B.text&&B.text.indexOf("|")>=0){var C=B.text.split("|");B.flowstate=C.pop().trim(),B.text=C.join("|")}g.symbols[B.key]=B}else if(w.indexOf("->")>=0)for(var Y=w.split("->"),O=0,P=Y.length;O=0){var I=R.split(",");R=I[0],F=I[1].trim()}if(g.start||(g.start=z),O+1")>=0)for(var W=w.split("@>"),O=0,P=W.length;Or.right_symbol.getCenter().y&&n<=r.right_symbol.width/2){s=!0;break}}if(s){if("end"===r.right_symbol.symbolType)return;r.right_symbol.setX(e.getX()+e.width+t),i()}}(),this.right_symbol.isPositioned=!0,this.right_symbol.render()}}},r.prototype.renderLines=function(){this.yes_symbol&&this.drawLineTo(this.yes_symbol,this.getAttr("yes-text"),this.yes_direction),this.no_symbol&&this.drawLineTo(this.no_symbol,this.getAttr("no-text"),this.no_direction)},t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.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 s=e(2),o=e(1).inherits;o(r,s),r.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 r=this;if(this.left_symbol){var s=this.getLeft();this.left_symbol.isPositioned||(this.left_symbol.setY(s.y-this.left_symbol.height/2),this.left_symbol.shiftX(-(this.group.getBBox().x+this.width+t)),function i(){for(var e,s=!1,o=0,h=r.chart.symbols.length;or.left_symbol.getCenter().y&&n<=r.left_symbol.width/2){s=!0;break}}if(s){if("end"===r.left_symbol.symbolType)return;r.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,s=!1,o=0,h=r.chart.symbols.length;or.right_symbol.getCenter().y&&n<=r.right_symbol.width/2){s=!0;break}}if(s){if("end"===r.right_symbol.symbolType)return;r.right_symbol.setX(e.getX()+e.width+t),i()}}(),this.right_symbol.isPositioned=!0,this.right_symbol.render())}},r.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=r},function(t,i,e){function r(t,i){i=i||{},this.paper=new s(t),this.options=o(i,h),this.symbols=[],this.lines=[],this.start=null}var s=e(16),o=e(1).defaults,h=e(8),n=e(5),a=e(6);r.prototype.handle=function(t){this.symbols.indexOf(t)<=-1&&this.symbols.push(t);var i=this;return t instanceof n?(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},r.prototype.startWith=function(t){return this.start=t,this.handle(t)},r.prototype.render=function(){var t,i,e=0,r=0,s=0,o=0,h=0,n=0,a=0,l=0;for(s=0,o=this.symbols.length;se&&(e=t.width),t.height>r&&(r=t.height);for(s=0,o=this.symbols.length;sh&&(h=p),y>n&&(n=y);for(s=0,o=this.lines.length;sh&&(h=x),g>n&&(n=g)}var c=this.options.scale,f=this.options["line-width"];this.minXFromSymbols>>0;if(0===e)return-1;var r=0;if(arguments.length>0&&(r=Number(arguments[1]),r!=r?r=0:0!==r&&r!=1/0&&r!=-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r)))),r>=e)return-1;for(var s=r>=0?r:Math.max(e-Math.abs(r),0);s>>0;if(0===e)return-1;var r=e;arguments.length>1&&(r=Number(arguments[1]),r!=r?r=0:0!==r&&r!=1/0&&r!=-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r))));for(var s=r>=0?Math.min(r,e-1):e-Math.abs(r);s>=0;s--)if(s in i&&i[s]===t)return s;return-1}),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")})},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"End",s.call(this,t,i,e)}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){function r(t,i){i=i||{},s.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,r=this.text.getBBox().height+2*this.textMargin,o=this.textMargin,h=r/2,a={x:o,y:h},l=[{x:o-this.textMargin,y:r},{x:o-this.textMargin+e,y:r},{x:o-this.textMargin+e+2*this.textMargin,y:0},{x:o-this.textMargin+2*this.textMargin,y:0},{x:o,y:h}],p=n(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 s=e(2),o=e(1).inherits,h=e(3),n=h.drawPath;o(r,s),r.prototype.getLeft=function(){var t=this.getY()+this.group.getBBox().height/2,i=this.getX()+this.textMargin;return{x:i,y:t}},r.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=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.call(this,t,i,e)}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0,20);i=i||{},i.text=i.text||"Start",s.call(this,t,i,e)}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){function r(t,i){var e=t.paper.rect(0,0,0,0);i=i||{},s.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 r=t.paper.rect(0,0,0,0);r.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&&(r.node.id=i.key+"i");var o=this.getAttr("font"),h=this.getAttr("font-family"),n=this.getAttr("font-weight");o&&r.attr({font:o}),h&&r.attr({"font-family":h}),n&&r.attr({"font-weight":n}),i.link&&r.attr("href",i.link),i.target&&r.attr("target",i.target),this.group.push(r),r.insertBefore(this.text),this.initialize()}var s=e(2),o=e(1).inherits;o(r,s),t.exports=r},function(t,i,e){if("undefined"!=typeof jQuery){var r=e(4);!function(t){t.fn.flowChart=function(i){return this.each(function(){var e=t(this),s=r(e.text());e.html(""),s.drawSVG(this,i)})}}(jQuery)}},function(i,e){i.exports=t}])}); //# sourceMappingURL=flowchart.min.js.map \ No newline at end of file diff --git a/release/flowchart.min.js.map b/release/flowchart.min.js.map index 8099ca0a..be4ea0e7 100644 --- a/release/flowchart.min.js.map +++ b/release/flowchart.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.min.js","webpack:///webpack/bootstrap d3ecf33745c811efe3d7","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","next_direction","next","undefined","text","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","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","right","bottom","top","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","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","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getStyle","s","startIndex","endIndex","getSymbValue","getSymbol","getNextPath","flowSymb","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","flowSymbols","lenS","symbVal","realSymb","direction","condOpt","nextSymb","lineStyleSymbols","curSymb","JSON","textMargin","yes_direction","no_direction","direction_yes","direction_no","max","startX","startY","yes_symbol","no_symbol","bottom_symbol","right_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","left_symbol","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","minX","minY","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","$","fn","each","$this","html"],"mappings":";;;;;CAAA,SAAAA,EAAAC,GACA,mBAAAC,UAAA,gBAAAC,QACAA,OAAAD,QAAAD,EAAAG,QAAA,gBACA,sBAAAC,gBAAAC,IACAD,QAAA,WAAAJ,OACA,CACA,GAAAM,GAAAN,EAAA,gBAAAC,SAAAE,QAAA,WAAAJ,EAAA,QACA,QAAAQ,KAAAD,IAAA,gBAAAL,iBAAAF,GAAAQ,GAAAD,EAAAC,KAECC,KAAA,SAAAC,GACD,MCAgB,UAAUC,GCN1B,QAAAC,GAAAC,GAGA,GAAAC,EAAAD,GACA,MAAAC,GAAAD,GAAAX,OAGA,IAAAC,GAAAW,EAAAD,IACAX,WACAa,GAAAF,EACAG,QAAA,EAUA,OANAL,GAAAE,GAAAI,KAAAd,EAAAD,QAAAC,IAAAD,QAAAU,GAGAT,EAAAa,QAAA,EAGAb,EAAAD,QAvBA,GAAAY,KAqCA,OATAF,GAAAM,EAAAP,EAGAC,EAAAO,EAAAL,EAGAF,EAAAQ,EAAA,GAGAR,EAAA,KDmBM,SAAUT,EAAQD,EAASU,GEzDjCA,EAAA,EACA,IAAAS,GAAAT,EAAA,EACAA,GAAA,GAEA,IAAAU,IACAD,QAGA,oBAAAE,UACAA,OAAAC,UAAAF,GAGAnB,EAAAD,QAAAoB,GFmEM,SAAUnB,EAAQD,GG/ExB,QAAAuB,GAAAC,EAAAC,GACA,IAAAD,GAAA,kBAAAA,GACA,MAAAC,EAGA,IAAAC,KACA,QAAAC,KAAAF,GACAC,EAAAC,GAAAF,EAAAE,EAGA,KAAAA,IAAAH,GACAA,EAAAG,KACA,gBAAAD,GAAAC,GACAD,EAAAC,GAAAJ,EAAAG,EAAAC,GAAAH,EAAAG,IAEAD,EAAAC,GAAAH,EAAAG,GAIA,OAAAD,GAGA,QAAAE,GAAAC,EAAAC,GACA,qBAAAC,QAAA,OAEAF,EAAAG,OAAAF,EACAD,EAAAI,UAAAF,OAAAG,OAAAJ,EAAAG,WACAE,aACAC,MAAAP,EACAQ,YAAA,EACAC,UAAA,EACAC,cAAA,SAGA,CAEAV,EAAAG,OAAAF,CACA,IAAAU,GAAA,YACAA,GAAAP,UAAAH,EAAAG,UACAJ,EAAAI,UAAA,GAAAO,GACAX,EAAAI,UAAAE,YAAAN,GAMA5B,EAAAD,SACAyC,SAAAlB,EACAmB,SAAAd,IH0FM,SAAU3B,EAAQD,EAASU,GItIjC,QAAAiC,GAAAC,EAAApB,EAAAqB,GACAtC,KAAAqC,QACArC,KAAAuC,MAAAvC,KAAAqC,MAAAG,MAAAC,MACAzC,KAAAsC,SACAtC,KAAA0C,eACA1C,KAAA2C,WAAA1B,EAAA0B,WACA3C,KAAA4C,UAAA3B,EAAA2B,WAAA,SACA5C,KAAA6C,UAAA5B,EAAA4B,cACA7C,KAAA8C,IAAA7B,EAAA6B,KAAA,GAEA9C,KAAA+C,eAAA9B,EAAA+B,MAAA/B,EAAA,eAAAA,EAAA,eAAAgC,OAEAjD,KAAAkD,KAAAlD,KAAAqC,MAAAG,MAAAU,KAAA,IAAAjC,EAAAiC,MAEAjC,EAAA6B,MAAA9C,KAAAkD,KAAAC,KAAA7C,GAAAW,EAAA6B,IAAA,KACA9C,KAAAkD,KAAAC,KAAAC,aAAA,QAAApD,KAAAqD,QAAA,cAEArD,KAAAkD,KAAAI,MACAC,cAAA,QACAC,EAAAxD,KAAAqD,QAAA,eACAI,KAAAzD,KAAAqD,QAAA,cACAK,YAAA1D,KAAAqD,QAAA,cAGA,IAAAM,GAAA3D,KAAAqD,QAAA,QACAO,EAAA5D,KAAAqD,QAAA,eACAQ,EAAA7D,KAAAqD,QAAA,cAEAM,IAAA3D,KAAAkD,KAAAI,MAAAK,SACAC,GAAA5D,KAAAkD,KAAAI,MAAAQ,cAAAF,IACAC,GAAA7D,KAAAkD,KAAAI,MAAAS,cAAAF,IAEA5C,EAAA+C,MAAAhE,KAAAkD,KAAAI,KAAA,OAAArC,EAAA+C,MACA/C,EAAAgD,QAAAjE,KAAAkD,KAAAI,KAAA,SAAArC,EAAAgD,OAEA,IAAAC,GAAAlE,KAAAqD,QAAA,WACA,IAAAa,EAAA,CAIA,OAFAC,GAAAlD,EAAAiC,KAAAkB,MAAA,KACAC,EAAA,GACAtE,EAAA,EAAAuE,EAAAH,EAAAI,OAAAxE,EAAAuE,EAAAvE,IAAA,CACA,GAAAyE,GAAAL,EAAApE,EACAC,MAAAkD,KAAAI,KAAA,OAAAe,EAAA,IAAAG,GAEAH,GADArE,KAAAkD,KAAAuB,UAAAC,MAAAR,EACA,KAAAM,EAEA,IAAAA,EAGAxE,KAAAkD,KAAAI,KAAA,OAAAe,EAAAM,UAAA,IAKA,GAFA3E,KAAAuC,MAAAqC,KAAA5E,KAAAkD,MAEAZ,EAAA,CACA,GAAAuC,GAAA7E,KAAAqD,QAAA,cAEAf,GAAAgB,MACAG,KAAAzD,KAAAqD,QAAA,QACAyB,OAAA9E,KAAAqD,QAAA,iBACA0B,eAAA/E,KAAAqD,QAAA,cACAqB,MAAA1E,KAAAkD,KAAAuB,UAAAC,MAAA,EAAAG,EACAG,OAAAhF,KAAAkD,KAAAuB,UAAAO,OAAA,EAAAH,IAGAvC,EAAAa,KAAAC,aAAA,QAAApD,KAAAqD,QAAA,UAEApC,EAAA+C,MAAA1B,EAAAgB,KAAA,OAAArC,EAAA+C,MACA/C,EAAAgD,QAAA3B,EAAAgB,KAAA,SAAArC,EAAAgD,QACAhD,EAAA6B,MAAAR,EAAAa,KAAA7C,GAAAW,EAAA6B,KAEA9C,KAAAuC,MAAAqC,KAAAtC,GACAA,EAAA2C,aAAAjF,KAAAkD,MAEAlD,KAAAkD,KAAAI,MACA4B,EAAA5C,EAAAmC,UAAAO,OAAA,IAGAhF,KAAAmF,cAlFA,GAAAC,GAAAjF,EAAA,GACAkF,EAAAD,EAAAC,SACAC,EAAAF,EAAAE,qBAsFAlD,GAAAV,UAAA2B,QAAA,SAAAkC,GACA,GAAAvF,KAAAqC,MAAA,CAGA,GAEAmD,GAFAC,EAAAzF,KAAAqC,MAAA,QAAArC,KAAAqC,MAAApB,QAAAsE,GAAAtC,OACAyC,EAAA1F,KAAAqC,MAAApB,QAAA,QAAAjB,KAAAqC,MAAApB,QAAA0E,QAAA3F,KAAA2C,YAAA4C,GAAAtC,MAKA,OAHAjD,MAAAqC,MAAApB,QAAA2B,WAAA5C,KAAAqC,MAAApB,QAAA2B,UAAA5C,KAAA4C,aACA4C,EAAAxF,KAAAqC,MAAApB,QAAA2B,UAAA5C,KAAA4C,WAAA2C,IAEAC,GAAAE,GAAAD,IAGArD,EAAAV,UAAAyD,WAAA,WACAnF,KAAAuC,MAAAqD,UAAA,IAAA5F,KAAAqD,QAAA,kBAAArD,KAAAqD,QAAA,eAEArD,KAAA0E,MAAA1E,KAAAuC,MAAAkC,UAAAC,MACA1E,KAAAgF,OAAAhF,KAAAuC,MAAAkC,UAAAO,QAGA5C,EAAAV,UAAAmE,UAAA,WACA,OAAArC,EAAAxD,KAAA8F,OAAA9F,KAAA0E,MAAA,EACAQ,EAAAlF,KAAA+F,OAAA/F,KAAAgF,OAAA,IAGA5C,EAAAV,UAAAoE,KAAA,WACA,MAAA9F,MAAAuC,MAAAkC,UAAAjB,GAGApB,EAAAV,UAAAqE,KAAA,WACA,MAAA/F,MAAAuC,MAAAkC,UAAAS,GAGA9C,EAAAV,UAAAsE,OAAA,SAAAxC,GACAxD,KAAAuC,MAAAqD,UAAA,KAAA5F,KAAA8F,OAAAtC,GAAA,IAAAxD,KAAA+F,SAGA3D,EAAAV,UAAAuE,KAAA,SAAAzC,GACAxD,KAAAuC,MAAAqD,UAAA,IAAApC,EAAA,IAAAxD,KAAA+F,SAGA3D,EAAAV,UAAAwE,OAAA,SAAAhB,GACAlF,KAAAuC,MAAAqD,UAAA,IAAA5F,KAAA8F,OAAA,KAAA9F,KAAA+F,OAAAb,KAGA9C,EAAAV,UAAAyE,KAAA,SAAAjB,GACAlF,KAAAuC,MAAAqD,UAAA,IAAA5F,KAAA8F,OAAA,IAAAZ,IAGA9C,EAAAV,UAAA0E,OAAA,WACA,GAAAlB,GAAAlF,KAAA+F,OACAvC,EAAAxD,KAAA8F,OAAA9F,KAAA0E,MAAA,CACA,QAAAlB,IAAA0B,MAGA9C,EAAAV,UAAA2E,UAAA,WACA,GAAAnB,GAAAlF,KAAA+F,OAAA/F,KAAAgF,OACAxB,EAAAxD,KAAA8F,OAAA9F,KAAA0E,MAAA,CACA,QAAAlB,IAAA0B,MAGA9C,EAAAV,UAAA4E,QAAA,WACA,GAAApB,GAAAlF,KAAA+F,OAAA/F,KAAAuC,MAAAkC,UAAAO,OAAA,EACAxB,EAAAxD,KAAA8F,MACA,QAAAtC,IAAA0B,MAGA9C,EAAAV,UAAA6E,SAAA,WACA,GAAArB,GAAAlF,KAAA+F,OAAA/F,KAAAuC,MAAAkC,UAAAO,OAAA,EACAxB,EAAAxD,KAAA8F,OAAA9F,KAAAuC,MAAAkC,UAAAC,KACA,QAAAlB,IAAA0B,MAGA9C,EAAAV,UAAA8E,OAAA,WACA,GAAAxG,KAAAgD,KAAA,CAEA,GAAAyD,GAAAzG,KACA0G,EAAA1G,KAAAqD,QAAA,cAEA,cAAArD,KAAA+C,eAAA,CAEA,GAAA4D,GAAA3G,KAAAuG,UAEAvG,MAAAgD,KAAA4D,eACA5G,KAAAgD,KAAAmD,KAAAQ,EAAAzB,EAAAlF,KAAAgD,KAAAgC,OAAA,GACAhF,KAAAgD,KAAAgD,OAAAhG,KAAAuC,MAAAkC,UAAAjB,EAAAxD,KAAA0E,MAAAgC,GAEA,QAAAG,KAGA,OADAC,GADAC,GAAA,EAEAhH,EAAA,EAAAiH,EAAAP,EAAApE,MAAAsD,QAAApB,OAAAxE,EAAAiH,EAAAjH,IAAA,CACA+G,EAAAL,EAAApE,MAAAsD,QAAA5F,EAEA,IAAAkH,GAAAC,KAAAC,IAAAL,EAAAjB,YAAArC,EAAAiD,EAAAzD,KAAA6C,YAAArC,EACA,IAAAsD,EAAAjB,YAAAX,EAAAuB,EAAAzD,KAAA6C,YAAAX,GAAA+B,GAAAR,EAAAzD,KAAA0B,MAAA,GACAqC,GAAA,CACA,QAIAA,IACAN,EAAAzD,KAAAiD,KAAAa,EAAAhB,OAAAgB,EAAApC,MAAAgC,GACAG,QAIA7G,KAAAgD,KAAA4D,cAAA,EAEA5G,KAAAgD,KAAAwD,cAEA,aAAAxG,KAAA+C,eAAA,CAEA,GAAAqE,GAAApH,KAAAsG,SAEAtG,MAAAgD,KAAA4D,eACA5G,KAAAgD,KAAAmD,KAAAiB,EAAAlC,EAAAlF,KAAAgD,KAAAgC,OAAA,GACAhF,KAAAgD,KAAAgD,SAAAhG,KAAAuC,MAAAkC,UAAAjB,EAAAxD,KAAA0E,MAAAgC,IAEA,QAAAG,KAGA,OADAC,GADAC,GAAA,EAEAhH,EAAA,EAAAiH,EAAAP,EAAApE,MAAAsD,QAAApB,OAAAxE,EAAAiH,EAAAjH,IAAA,CACA+G,EAAAL,EAAApE,MAAAsD,QAAA5F,EAEA,IAAAkH,GAAAC,KAAAC,IAAAL,EAAAjB,YAAArC,EAAAiD,EAAAzD,KAAA6C,YAAArC,EACA,IAAAsD,EAAAjB,YAAAX,EAAAuB,EAAAzD,KAAA6C,YAAAX,GAAA+B,GAAAR,EAAAzD,KAAA0B,MAAA,GACAqC,GAAA,CACA,QAIAA,IACAN,EAAAzD,KAAAiD,KAAAa,EAAAhB,OAAAgB,EAAApC,MAAAgC,GACAG,QAIA7G,KAAAgD,KAAA4D,cAAA,EAEA5G,KAAAgD,KAAAwD,cAEA,CACA,GAAAa,GAAArH,KAAAqG,WAEArG,MAAAgD,KAAA4D,eACA5G,KAAAgD,KAAAkD,OAAAlG,KAAA+F,OAAA/F,KAAAgF,OAAA0B,GACA1G,KAAAgD,KAAAiD,KAAAoB,EAAA7D,EAAAxD,KAAAgD,KAAA0B,MAAA,GACA1E,KAAAgD,KAAA4D,cAAA,EAEA5G,KAAAgD,KAAAwD,aAMApE,EAAAV,UAAA4F,YAAA,WACAtH,KAAAgD,OACAhD,KAAA+C,eACA/C,KAAAuH,WAAAvH,KAAAgD,KAAAhD,KAAAqD,QAAA,kBAAArD,KAAA+C,gBAEA/C,KAAAuH,WAAAvH,KAAAgD,KAAAhD,KAAAqD,QAAA,qBAKAjB,EAAAV,UAAA6F,WAAA,SAAAjF,EAAAY,EAAAsE,GACAxH,KAAA0C,YAAA+E,QAAAnF,GAAA,GACAtC,KAAA0C,YAAAkC,KAAAtC,EAGA,IAqBAoF,GArBAlE,EAAAxD,KAAA6F,YAAArC,EACA0B,EAAAlF,KAAA6F,YAAAX,EACAyC,EAAA3H,KAAAuG,WACAqB,EAAA5H,KAAAqG,YACAwB,EAAA7H,KAAAoG,SACA0B,EAAA9H,KAAAsG,UAEAyB,EAAAzF,EAAAuD,YAAArC,EACAwE,EAAA1F,EAAAuD,YAAAX,EACA+C,EAAA3F,EAAA8D,SACA8B,EAAA5F,EAAAiE,WACA4B,EAAA7F,EAAAgE,UAEA8B,EAAA5E,IAAAuE,EACAM,EAAAnD,IAAA8C,EACAM,EAAApD,EAAA8C,EACAO,EAAArD,EAAA8C,GAAAhI,OAAAsC,EACAkG,EAAAhF,EAAAuE,EACAU,EAAAjF,EAAAuE,EAEAW,EAAA,EAEAhC,EAAA1G,KAAAqD,QAAA,eACAsF,EAAA3I,KAAAqD,QAAA,aAEA,IAAAmE,GAAA,WAAAA,IAAAY,IAAAE,EAKA,GAAAd,GAAA,UAAAA,IAAAa,IAAAI,EAKA,GAAAjB,GAAA,SAAAA,IAAAa,IAAAG,EAKA,GAAAhB,GAAA,UAAAA,IAAAY,IAAAG,EAUA,GAAAf,GAAA,UAAAA,IAAAY,IAAAE,EAUA,GAAAd,GAAA,WAAAA,IAAAgB,EAmBA,GAAAhB,GAAA,WAAAA,IAAAiB,IAAAH,EAUA,GAAAd,GAAA,WAAAA,IAAAiB,EAWA,GAAAjB,GAAA,UAAAA,GAAAgB,EACAd,EAAArC,EAAArF,KAAAqC,MAAAsF,IACAnE,EAAAmE,EAAAnE,EAAAkD,EAAA,EAAAxB,EAAAyC,EAAAzC,IACA1B,EAAAmE,EAAAnE,EAAAkD,EAAA,EAAAxB,EAAA+C,EAAA/C,EAAAwB,EAAA,IACAlD,EAAAyE,EAAAzE,EAAA0B,EAAA+C,EAAA/C,EAAAwB,EAAA,IACAlD,EAAAyE,EAAAzE,EAAA0B,EAAA+C,EAAA/C,IACAhC,GACAlD,KAAA4I,YAAA,EACAtG,EAAAuG,QAAA,EACAH,EAAAf,EAAAnE,EAAAkD,EAAA,MACA,IAAAc,GAAA,UAAAA,GAAAiB,EACAf,EAAArC,EAAArF,KAAAqC,MAAAsF,IACAnE,EAAAyE,EAAAzE,EAAA0B,EAAAyC,EAAAzC,IACA1B,EAAAyE,EAAAzE,EAAA0B,EAAA+C,EAAA/C,IACAhC,GACAlD,KAAA4I,YAAA,EACAtG,EAAAuG,QAAA,EACAH,EAAAf,EAAAnE,EAAAkD,EAAA,MACA,IAAAc,GAAA,WAAAA,GAAAY,GAAAG,EACAb,EAAArC,EAAArF,KAAAqC,MAAAuF,IACApE,EAAAoE,EAAApE,EAAA0B,EAAA0C,EAAA1C,EAAAwB,EAAA,IACAlD,EAAAmE,EAAAnE,EAAAkD,EAAA,EAAAxB,EAAA0C,EAAA1C,EAAAwB,EAAA,IACAlD,EAAAmE,EAAAnE,EAAAkD,EAAA,EAAAxB,EAAA+C,EAAA/C,EAAAwB,EAAA,IACAlD,EAAAyE,EAAAzE,EAAA0B,EAAA+C,EAAA/C,EAAAwB,EAAA,IACAlD,EAAAyE,EAAAzE,EAAA0B,EAAA+C,EAAA/C,IACAhC,GACAlD,KAAA8I,aAAA,EACAxG,EAAAuG,QAAA,EACAH,EAAAd,EAAApE,EAAAkD,EAAA,MACA,aAAAc,GAAAY,GAAAG,EAAA,CACA,GAAAQ,GAAAjB,EAAAtE,EAAAkD,EAAA,CACAyB,GAAA3E,EAAAsE,EAAAtE,IACAuF,EAAAZ,EAAA3E,EAAAkD,EAAA,GAEAgB,EAAArC,EAAArF,KAAAqC,MAAAyF,IACAtE,EAAAuF,EAAA7D,EAAA4C,EAAA5C,IACA1B,EAAAuF,EAAA7D,EAAA+C,EAAA/C,EAAAwB,EAAA,IACAlD,EAAAyE,EAAAzE,EAAA0B,EAAA+C,EAAA/C,EAAAwB,EAAA,IACAlD,EAAAyE,EAAAzE,EAAA0B,EAAA+C,EAAA/C,IACAhC,GACAlD,KAAAgJ,WAAA,EACA1G,EAAAuG,QAAA,EACAH,EAAAZ,EAAAtE,MACA,SAAAgE,GACAE,EAAArC,EAAArF,KAAAqC,MAAAyF,IACAtE,EAAAyE,EAAAzE,GAAAsE,EAAAtE,EAAAyE,EAAAzE,GAAA,EAAA0B,EAAA4C,EAAA5C,IACA1B,EAAAyE,EAAAzE,GAAAsE,EAAAtE,EAAAyE,EAAAzE,GAAA,EAAA0B,EAAA+C,EAAA/C,EAAAwB,EAAA,IACAlD,EAAAyE,EAAAzE,EAAA0B,EAAA+C,EAAA/C,EAAAwB,EAAA,IACAlD,EAAAyE,EAAAzE,EAAA0B,EAAA+C,EAAA/C,IACAhC,GACAlD,KAAAgJ,WAAA,EACA1G,EAAAuG,QAAA,EACAH,EAAAZ,EAAAtE,GACA,QAAAgE,IACAE,EAAArC,EAAArF,KAAAqC,MAAAwF,IACArE,EAAAqE,EAAArE,EAAA0B,EAAA+C,EAAA/C,EAAAwB,EAAA,IACAlD,EAAAyE,EAAAzE,EAAA0B,EAAA+C,EAAA/C,EAAAwB,EAAA,IACAlD,EAAAyE,EAAAzE,EAAA0B,EAAA+C,EAAA/C,IACAhC,GACAlD,KAAAiJ,UAAA,EACA3G,EAAAuG,QAAA,EACAH,EAAAb,EAAArE,OAvEAkE,GAAArC,EAAArF,KAAAqC,MAAAuF,IACApE,EAAAoE,EAAApE,EAAA0B,EAAA0C,EAAA1C,EAAAwB,EAAA,IACAlD,EAAAoE,EAAApE,GAAAoE,EAAApE,EAAAyE,EAAAzE,GAAA,EAAA0B,EAAA0C,EAAA1C,EAAAwB,EAAA,IACAlD,EAAAoE,EAAApE,GAAAoE,EAAApE,EAAAyE,EAAAzE,GAAA,EAAA0B,EAAA+C,EAAA/C,EAAAwB,EAAA,IACAlD,EAAAyE,EAAAzE,EAAA0B,EAAA+C,EAAA/C,EAAAwB,EAAA,IACAlD,EAAAyE,EAAAzE,EAAA0B,EAAA+C,EAAA/C,IACAhC,GACAlD,KAAA8I,aAAA,EACAxG,EAAAuG,QAAA,EACAH,EAAAd,EAAApE,GAAAoE,EAAApE,EAAAyE,EAAAzE,GAAA,MAnBAkE,GAAArC,EAAArF,KAAAqC,MAAAuF,IACApE,EAAAoE,EAAApE,EAAA0B,EAAA+C,EAAA/C,EAAAwB,EAAA,IACAlD,EAAAyE,EAAAzE,EAAA0B,EAAA+C,EAAA/C,EAAAwB,EAAA,IACAlD,EAAAyE,EAAAzE,EAAA0B,EAAA+C,EAAA/C,IACAhC,GACAlD,KAAA8I,aAAA,EACAxG,EAAAuG,QAAA,EACAH,EAAAd,EAAApE,EACAyE,EAAAzE,EAAAkF,MAAAT,EAAAzE,OA1BAkE,GADA1H,KAAAkJ,SAAAX,EACAlD,EAAArF,KAAAqC,MAAAuF,IACApE,EAAAoE,EAAApE,EAAA0B,EAAA0C,EAAA1C,EAAAwB,EAAA,IACAlD,EAAAoE,EAAApE,GAAAoE,EAAApE,EAAAyE,EAAAzE,GAAA,EAAA0B,EAAA0C,EAAA1C,EAAAwB,EAAA,IACAlD,EAAAoE,EAAApE,GAAAoE,EAAApE,EAAAyE,EAAAzE,GAAA,EAAA0B,EAAA+C,EAAA/C,EAAAwB,EAAA,IACAlD,EAAAyE,EAAAzE,EAAA0B,EAAA+C,EAAA/C,EAAAwB,EAAA,IACAlD,EAAAyE,EAAAzE,EAAA0B,EAAA+C,EAAA/C,IACAhC,GAEAmC,EAAArF,KAAAqC,MAAAuF,IACApE,EAAAoE,EAAApE,EAAA0B,EAAA+C,EAAA/C,EAAAwB,EAAA,IACAlD,EAAAyE,EAAAzE,EAAA0B,EAAA+C,EAAA/C,EAAAwB,EAAA,IACAlD,EAAAyE,EAAAzE,EAAA0B,EAAA+C,EAAA/C,IACAhC,GAEAlD,KAAA8I,aAAA,EACAxG,EAAAuG,QAAA,EACAH,EAAAd,EAAApE,GAAAoE,EAAApE,EAAAyE,EAAAzE,GAAA,MA3BAkE,GAAArC,EAAArF,KAAAqC,MAAAsF,IACAnE,EAAAmE,EAAAnE,EAAAkD,EAAA,EAAAxB,EAAAyC,EAAAzC,IACA1B,EAAAmE,EAAAnE,EAAAkD,EAAA,EAAAxB,EAAA+C,EAAA/C,EAAAwB,EAAA,IACAlD,EAAAyE,EAAAzE,EAAA0B,EAAA+C,EAAA/C,EAAAwB,EAAA,IACAlD,EAAAyE,EAAAzE,EAAA0B,EAAA+C,EAAA/C,IACAhC,GACAlD,KAAA4I,YAAA,EACAtG,EAAAuG,QAAA,EACAH,EAAAf,EAAAnE,EAAAkD,EAAA,MAlBAgB,GAAArC,EAAArF,KAAAqC,MAAAsF,IACAnE,EAAAmE,EAAAnE,EAAAkD,EAAA,EAAAxB,EAAAyC,EAAAzC,IACA1B,EAAAmE,EAAAnE,EAAAkD,EAAA,EAAAxB,EAAA+C,EAAA/C,EAAAwB,EAAA,IACAlD,EAAAyE,EAAAzE,EAAA0B,EAAA+C,EAAA/C,EAAAwB,EAAA,IACAlD,EAAAyE,EAAAzE,EAAA0B,EAAA+C,EAAA/C,IACAhC,GACAlD,KAAA4I,YAAA,EACAtG,EAAAuG,QAAA,EACAH,EAAAf,EAAAnE,EAAAkD,EAAA,MAbAgB,GAAArC,EAAArF,KAAAqC,MAAAyF,EAAAI,EAAAhF,GACAlD,KAAAgJ,WAAA,EACA1G,EAAA6G,UAAA,EACAT,EAAAR,EAAA1E,MARAkE,GAAArC,EAAArF,KAAAqC,MAAAsF,EAAAQ,EAAAjF,GACAlD,KAAA4I,YAAA,EACAtG,EAAA4G,SAAA,EACAR,EAAAP,EAAA3E,MARAkE,GAAArC,EAAArF,KAAAqC,MAAAuF,EAAAK,EAAA/E,GACAlD,KAAA8I,aAAA,EACAxG,EAAAuG,QAAA,EACAH,EAAAd,EAAApE,CA4IA,IAJAxD,KAAA6C,UAAAP,EAAAQ,MAAA4E,GACAA,EAAApE,KAAAtD,KAAA6C,UAAAP,EAAAQ,MAGA4E,EAAA,CACA,OAAA0B,GAAA,EAAAC,EAAArJ,KAAAqC,MAAAiH,MAAA/E,OAAA6E,EAAAC,EAAAD,IAOA,OALApC,GADAuC,EAAAvJ,KAAAqC,MAAAiH,MAAAF,GAGAI,EAAAD,EAAAjG,KAAA,QACAmG,EAAA/B,EAAApE,KAAA,QAEAoG,EAAA,EAAAC,EAAAH,EAAAjF,OAAA,EAAAmF,EAAAC,EAAAD,IAAA,CACA,GAAAE,KACAA,GAAAhF,MAAA,IAAA4E,EAAAE,GAAA,GAAAF,EAAAE,GAAA,KACAE,EAAAhF,MAAA,IAAA4E,EAAAE,EAAA,MAAAF,EAAAE,EAAA,OAOA,QALAG,GAAAD,EAAA,MACAE,EAAAF,EAAA,MACAG,EAAAH,EAAA,MACAI,EAAAJ,EAAA,MAEAK,EAAA,EAAAC,EAAAT,EAAAlF,OAAA,EAAA0F,EAAAC,EAAAD,IAAA,CACA,GAAAE,KACAA,GAAAvF,MAAA,IAAA6E,EAAAQ,GAAA,GAAAR,EAAAQ,GAAA,KACAE,EAAAvF,MAAA,IAAA6E,EAAAQ,EAAA,MAAAR,EAAAQ,EAAA,OAEA,IAAAG,GAAAD,EAAA,MACAE,EAAAF,EAAA,MACAG,EAAAH,EAAA,MACAI,EAAAJ,EAAA,MAEAK,EAAAlF,EAAAuE,EAAAC,EAAAC,EAAAC,EAAAI,EAAAC,EAAAC,EAAAC,EACA,IAAAC,EAAAC,SAAAD,EAAAE,QAAA,CAEA,GAAAC,EACAN,KAAAE,EACAH,EAAAE,GACAK,GAAA,IAAAH,EAAAhH,EAAA,EAAAmF,EAAA0B,GACAZ,EAAAmB,OAAAX,EAAA,IAAAU,GACAA,GAAA,IAAAH,EAAAhH,EAAA,EAAAmF,EAAA0B,EAAAG,EAAAhH,EAAA6G,EAAA,EAAA1B,EAAA6B,EAAAhH,EAAA,EAAAmF,EAAA0B,GACAZ,EAAAmB,OAAAX,EAAA,IAAAU,GACAjD,EAAApE,KAAA,OAAAmG,KAEAkB,GAAA,IAAAH,EAAAhH,EAAA,EAAAmF,EAAA0B,GACAZ,EAAAmB,OAAAX,EAAA,IAAAU,GACAA,GAAA,IAAAH,EAAAhH,EAAA,EAAAmF,EAAA0B,EAAAG,EAAAhH,EAAA6G,EAAA,EAAA1B,EAAA6B,EAAAhH,EAAA,EAAAmF,EAAA0B,GACAZ,EAAAmB,OAAAX,EAAA,IAAAU,GACAjD,EAAApE,KAAA,OAAAmG,IAGAY,EAAAE,GACAI,GAAA,IAAAP,EAAAI,EAAAtF,EAAA,EAAAyD,GACAc,EAAAmB,OAAAX,EAAA,IAAAU,GACAA,GAAA,IAAAP,EAAAI,EAAAtF,EAAA,EAAAyD,EAAAyB,EAAA,EAAAzB,EAAA6B,EAAAtF,EAAAkF,EAAAI,EAAAtF,EAAA,EAAAyD,GACAc,EAAAmB,OAAAX,EAAA,IAAAU,GACAjD,EAAApE,KAAA,OAAAmG,KAEAkB,GAAA,IAAAP,EAAAI,EAAAtF,EAAA,EAAAyD,GACAc,EAAAmB,OAAAX,EAAA,IAAAU,GACAA,GAAA,IAAAP,EAAAI,EAAAtF,EAAA,EAAAyD,EAAAyB,EAAA,EAAAzB,EAAA6B,EAAAtF,EAAAkF,EAAAI,EAAAtF,EAAA,EAAAyD,GACAc,EAAAmB,OAAAX,EAAA,IAAAU,GACAjD,EAAApE,KAAA,OAAAmG,IAIAQ,GAAA,EACAjD,GAAA,IAMAhH,KAAAqC,MAAAiH,MAAA1E,KAAA8C,IACAzE,SAAAjD,KAAAqC,MAAAwI,iBAAA7K,KAAAqC,MAAAwI,gBAAA/C,EAAAtE,KACAxD,KAAAqC,MAAAwI,gBAAA/C,EAAAtE,KAIAxD,KAAAqC,MAAAyI,cAAA9K,KAAAqC,MAAAyI,cAAApC,EAAA1I,KAAAqC,MAAAyI,gBACA9K,KAAAqC,MAAAyI,aAAApC,IAIAhJ,EAAAD,QAAA2C,GJoJM,SAAU1C,EAAQD,GK/oBxB,QAAAsL,GAAA1I,EAAA2I,EAAAC,GACA,GAAAlL,GAAAiH,EACAkE,EAAA,UACA,KAAAnL,EAAA,EAAAiH,EAAA,EAAAiE,EAAA1G,OAAA,EAAAxE,EAAAiH,EAAAjH,GAAA,EACAmL,GAAA,MAAAnL,EAAA,OAAAA,EAAA,MAEA,IAAAoL,IAAAH,EAAAxH,EAAAwH,EAAA9F,EACA,KAAAnF,EAAA,EAAAiH,EAAAiE,EAAA1G,OAAAxE,EAAAiH,EAAAjH,IACAoL,EAAAvG,KAAAqG,EAAAlL,GAAAyD,GACA2H,EAAAvG,KAAAqG,EAAAlL,GAAAmF,EAEA,IAAA5C,GAAAD,EAAAG,MAAA0I,OAAAC,EACA7I,GAAAgB,KAAA,SAAAjB,EAAApB,QAAA,kBACAqB,EAAAgB,KAAA,eAAAjB,EAAApB,QAAA,cAEA,IAAA0C,GAAAtB,EAAApB,QAAA0C,KACAC,EAAAvB,EAAApB,QAAA,eACA4C,EAAAxB,EAAApB,QAAA,cAMA,OAJA0C,IAAArB,EAAAgB,MAAAK,SACAC,GAAAtB,EAAAgB,MAAAQ,cAAAF,IACAC,GAAAvB,EAAAgB,MAAAS,cAAAF,IAEAvB,EAGA,QAAA+C,GAAAhD,EAAA+I,EAAAC,EAAAnI,GACA,GAAAnD,GAAAiH,CAEA,oBAAAxF,OAAAE,UAAA4J,SAAA9K,KAAA6K,KACAA,MAGA,IAAAH,GAAA,UACA,KAAAnL,EAAA,EAAAiH,EAAA,EAAAqE,EAAA9G,OAAA,EAAAxE,EAAAiH,EAAAjH,GAAA,EACAmL,GAAA,MAAAnL,EAAA,OAAAA,EAAA,MAEA,IAAAoL,IAAAC,EAAA5H,EAAA4H,EAAAlG,EACA,KAAAnF,EAAA,EAAAiH,EAAAqE,EAAA9G,OAAAxE,EAAAiH,EAAAjH,IACAoL,EAAAvG,KAAAyG,EAAAtL,GAAAyD,GACA2H,EAAAvG,KAAAyG,EAAAtL,GAAAmF,EAGA,IAAAwC,GAAArF,EAAAG,MAAA0I,OAAAC,EACAzD,GAAApE,MACAwB,OAAAzC,EAAApB,QAAA,cACA8D,eAAA1C,EAAApB,QAAA,cACAsK,YAAAlJ,EAAApB,QAAA,cAGA,IAAA0C,GAAAtB,EAAApB,QAAA0C,KACAC,EAAAvB,EAAApB,QAAA,eACA4C,EAAAxB,EAAApB,QAAA,cAMA,IAJA0C,GAAA+D,EAAApE,MAAAK,SACAC,GAAA8D,EAAApE,MAAAQ,cAAAF,IACAC,GAAA6D,EAAApE,MAAAS,cAAAF,IAEAX,EAAA,CAEA,GAAAsI,IAAA,EAEAC,EAAApJ,EAAAG,MAAAU,KAAA,IAAAA,GAEAwI,GAAA,EACAC,EAAAN,EAAA,EAEAD,GAAAlG,IAAAyG,EAAAzG,IACAwG,GAAA,EAGA,IAAAlI,GAAA,EACA0B,EAAA,CAEAsG,IAEAhI,EADA4H,EAAA5H,EAAAmI,EAAAnI,EACA4H,EAAA5H,GAAA4H,EAAA5H,EAAAmI,EAAAnI,GAAA,EAEAmI,EAAAnI,GAAAmI,EAAAnI,EAAA4H,EAAA5H,GAAA,EAIA0B,EADAkG,EAAAlG,EAAAyG,EAAAzG,EACAkG,EAAAlG,GAAAkG,EAAAlG,EAAAyG,EAAAzG,GAAA,EAEAyG,EAAAzG,GAAAyG,EAAAzG,EAAAkG,EAAAlG,GAAA,EAGAwG,GACAlI,GAAAiI,EAAAhH,UAAAC,MAAA,EACAQ,GAAA7C,EAAApB,QAAA,iBAEAuC,GAAAnB,EAAApB,QAAA,eACAiE,GAAAuG,EAAAhH,UAAAO,OAAA,KAGAxB,EAAA4H,EAAA5H,EACA0B,EAAAkG,EAAAlG,EAEAwG,GACAlI,GAAAnB,EAAApB,QAAA,iBACAiE,GAAA7C,EAAApB,QAAA,iBAEAuC,GAAAnB,EAAApB,QAAA,iBACAiE,GAAA7C,EAAApB,QAAA,eACAmK,EAAAlG,EAAAyG,EAAAzG,IACAA,GAAA,EAAA7C,EAAApB,QAAA,kBAKAwK,EAAAnI,MACAC,cAAA,QACAG,YAAArB,EAAApB,QAAA,aACAwC,KAAApB,EAAApB,QAAA,cACAuC,IACA0B,MAGAvB,GAAA8H,EAAAnI,MAAAK,SACAC,GAAA6H,EAAAnI,MAAAQ,cAAAF,IACAC,GAAA4H,EAAAnI,MAAAS,cAAAF,IAGA,MAAA6D,GAGA,QAAApC,GAAAsG,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,GAEA,GAAAC,GAAAtM,EAAAuM,EAAAC,EAAAC,EAAAC,GACAhJ,EAAA,KACA0B,EAAA,KACAuF,SAAA,EACAC,SAAA,EAGA,OADA0B,IAAAD,EAAAF,IAAAH,EAAAF,IAAAM,EAAAF,IAAAD,EAAAF,GACA,IAAAO,EACAI,GAEA1M,EAAA+L,EAAAI,EACAI,EAAAT,EAAAI,EACAM,GAAAJ,EAAAF,GAAAlM,GAAAqM,EAAAF,GAAAI,EACAE,GAAAT,EAAAF,GAAA9L,GAAAiM,EAAAF,GAAAQ,EACAvM,EAAAwM,EAAAF,EACAC,EAAAE,EAAAH,EAGAI,EAAAhJ,EAAAoI,EAAA9L,GAAAgM,EAAAF,GACAY,EAAAtH,EAAA2G,EAAA/L,GAAAiM,EAAAF,GAOA/L,EAAA,GAAAA,EAAA,IACA0M,EAAA/B,SAAA,GAGA4B,EAAA,GAAAA,EAAA,IACAG,EAAA9B,SAAA,GAGA8B,GAGA9M,EAAAD,SACAsL,WACA1F,WACAC,0BL0pBM,SAAU5F,EAAQD,EAASU,GMzzBjC,QAAAS,GAAA6L,GA6IA,QAAAC,GAAAC,GACA,GAAAC,GAAAD,EAAAlF,QAAA,OACAoF,EAAAF,EAAAlF,QAAA,IACA,OAAAmF,IAAA,GAAAC,GAAA,EACAF,EAAAhI,UAAAiI,EAAAC,GAEA,KAGA,QAAAC,GAAAH,GACA,GAAAC,GAAAD,EAAAlF,QAAA,OACAoF,EAAAF,EAAAlF,QAAA,IACA,OAAAmF,IAAA,GAAAC,GAAA,EACAF,EAAAhI,UAAAiI,EAAAC,GAEA,GAGA,QAAAE,GAAAJ,GACA,GAAAC,GAAAD,EAAAlF,QAAA,OACAoF,EAAAF,EAAAlF,QAAA,IACA,OAAAmF,IAAA,GAAAC,GAAA,EACAxK,EAAAsD,QAAAgH,EAAAhI,UAAA,EAAAiI,EAAA,IAEAvK,EAAAsD,QAAAgH,GAGA,QAAAK,GAAAL,GACA,GAAA3J,GAAA,OACA4J,EAAAD,EAAAlF,QAAA,OACAoF,EAAAF,EAAAlF,QAAA,IASA,OARAmF,IAAA,GAAAC,GAAA,IACA7J,EAAAiK,EAAAtI,UAAAiI,EAAAC,GACA7J,EAAAyE,QAAA,QACA,QAAAzE,GAAA,OAAAA,IACAA,EAAA,SAAAA,IAIAA,EAnLAyJ,KAAA,GACAA,IAAAS,MAmHA,QAjHA7K,IACAsD,WACAwH,MAAA,KACAC,QAAA,SAAAC,EAAApM,GAWA,QAAAqM,GAAAX,GACA,GAAAY,EAAAZ,EAAA7J,KACA,MAAAyK,GAAAZ,EAAA7J,IAGA,QAAA6J,EAAAhK,YACA,YACA4K,EAAAZ,EAAA7J,KAAA,GAAA0K,GAAAC,EAAAd,EACA,MACA,WACAY,EAAAZ,EAAA7J,KAAA,GAAA4K,GAAAD,EAAAd,EACA,MACA,iBACAY,EAAAZ,EAAA7J,KAAA,GAAA6K,GAAAF,EAAAd,EACA,MACA,mBACAY,EAAAZ,EAAA7J,KAAA,GAAA8K,GAAAH,EAAAd,EACA,MACA,kBACAY,EAAAZ,EAAA7J,KAAA,GAAA+K,GAAAJ,EAAAd,EACA,MACA,iBACAY,EAAAZ,EAAA7J,KAAA,GAAAgL,GAAAL,EAAAd,EACA,MACA,gBACAY,EAAAZ,EAAA7J,KAAA,GAAAiL,GAAAN,EAAAd,EACA,MACA,SACA,UAAAqB,OAAA,sBAGA,MAAAT,GAAAZ,EAAA7J,KAzCA,GAAA2D,GAAAzG,IAEAA,MAAAyN,SACAzN,KAAAyN,QAAAQ,OAGA,IAAAR,GAAA,GAAA5M,GAAAwM,EAAApM,EACAjB,MAAAyN,SACA,IAAAF,OAoCA,QAAAW,GAAAvB,EAAAwB,EAAAC,GACA,GAAAC,GAAAf,EAAAX,EA2BA,OAzBAlG,GAAA0G,QAAAR,EACAc,EAAAa,UAAAD,GACAF,GAAAC,IAAAD,EAAAI,SACAJ,YAAA,IACAC,EAAAI,MAAA7B,GACAwB,EAAAK,IAAAH,GAEAD,EAAAK,KAAA9B,GACAwB,EAAAM,GAAAJ,IAEAF,YAAA,IACAC,EAAAM,QAAA/B,GACAwB,EAAAO,MAAAL,GAEAD,EAAAO,QAAAhC,GACAwB,EAAAQ,MAAAN,GAEAD,EAAAQ,QAAAjC,GACAwB,EAAAS,MAAAP,IAGAF,EAAAU,KAAAR,IAIAA,EAAAE,OACAF,GAGAA,YAAA,IACA1B,EAAA6B,KACAN,EAAAvB,EAAA6B,IAAAH,EAAA1B,GAEAA,EAAA8B,IACAP,EAAAvB,EAAA8B,GAAAJ,EAAA1B,IAEA0B,YAAA,IACA1B,EAAA+B,OACAR,EAAAvB,EAAA+B,MAAAL,EAAA1B,GAEAA,EAAAgC,OACAT,EAAAvB,EAAAgC,MAAAN,EAAA1B,GAEAA,EAAAiC,OACAV,EAAAvB,EAAAiC,MAAAP,EAAA1B,IAEAA,EAAA3J,MACAkL,EAAAvB,EAAA3J,KAAAqL,EAAA1B,GAGA0B,IACArO,KAAAmN,OAEAM,EAAAjH,UAEAyH,MAAA,WACAjO,KAAAyN,QAAAQ,UAIA3E,KACAwF,EAAA,EACAC,EAAA,EAAAC,EAAAvC,EAAAlI,OAAAwK,EAAAC,EAAAD,IACA,UAAAtC,EAAAsC,IAAA,OAAAtC,EAAAsC,EAAA,IACA,GAAAE,GAAAxC,EAAA9H,UAAAmK,EAAAC,EACAD,GAAAC,EAAA,EACAzF,EAAA1E,KAAAqK,EAAAC,QAAA,eAIAJ,EAAArC,EAAAlI,QACA+E,EAAA1E,KAAA6H,EAAA0C,OAAAL,GAGA,QAAA1F,GAAA,EAAApC,EAAAsC,EAAA/E,OAAA6E,EAAApC,GAAA,CACA,GAAAoI,GAAA9F,EAAAF,EAEAgG,GAAA3H,QAAA,SAAA2H,EAAA3H,QAAA,SAAA2H,EAAA3H,QAAA,SACA6B,EAAAF,EAAA,SAAAgG,EACA9F,EAAAsB,OAAAxB,EAAA,GACApC,KAEAoC,IA8CA,KAAAE,EAAA/E,OAAA,IACA,GAAAmD,GAAA4B,EAAAsB,OAAA,QAAAsC,MAEA,IAAAxF,EAAAD,QAAA,UAEA,GAAA4H,GAAA3H,EAAAtD,MAAA,MACA9B,GACAQ,IAAAuM,EAAA,GAAAH,QAAA,aACAvM,WAAA0M,EAAA,GACAnM,KAAA,KACAc,KAAA,KACAC,OAAA,KACArB,UAAA,KACAC,aACAyM,WAIAA,EAAAD,EAAA,GAAAE,MAAA,WACA,IAAAD,KAAA/K,OAAA,EAEA,OADAiL,GAAAF,EAAA,GAAAlL,MAAA,KACArE,EAAA,EAAAA,EAAAyP,EAAAjL,OAAAxE,IAAA,CACA,GAAA0P,GAAAD,EAAA,GAAApL,MAAA,IACA,IAAAqL,EAAAlL,SACAjC,EAAAgN,OAAAG,EAAA,IAAAA,EAAA,IAKA,GAAAC,EAuBA,IArBApN,EAAAK,WAAA8E,QAAA,WACAiI,EAAApN,EAAAK,WAAAyB,MAAA,MACA9B,EAAAK,WAAA+M,EAAA7I,QACAvE,EAAAY,KAAAwM,EAAAC,KAAA,OAGArN,EAAAY,MAAAZ,EAAAY,KAAAuE,QAAA,UACAiI,EAAApN,EAAAY,KAAAkB,MAAA,MACA9B,EAAAY,KAAAwM,EAAA7I,QACAvE,EAAA0B,KAAA0L,EAAAC,KAAA,OACArN,EAAAK,WAAA8E,QAAA,WACAiI,EAAApN,EAAAK,WAAAyB,MAAA,MACA9B,EAAAK,WAAA+M,EAAA7I,QACAvE,EAAA0B,KAAA0L,EAAAC,KAAA,OAGArN,EAAAK,WAAA8E,QAAA,WACAnF,EAAAK,WAAAL,EAAAK,WAAAyB,MAAA,UAIA9B,EAAA0B,KAAA,CACA,GAAA4I,GAAAtK,EAAA0B,KAAAyD,QAAA,OACAoF,EAAAvK,EAAA0B,KAAAyD,QAAA,IACAmF,IAAA,GAAAC,GAAA,IACAvK,EAAA2B,OAAA3B,EAAA0B,KAAAW,UAAAiI,EAAAC,GACAvK,EAAA0B,KAAA1B,EAAA0B,KAAAW,UAAA,EAAAiI,EAAA,IAMA,GAAAtK,EAAAY,MACAZ,EAAAY,KAAAuE,QAAA,SACA,GAAAmI,GAAAtN,EAAAY,KAAAkB,MAAA,IACA9B,GAAAM,UAAAgN,EAAAC,MAAA3C,OACA5K,EAAAY,KAAA0M,EAAAD,KAAA,KAKAtN,EAAAsD,QAAArD,EAAAQ,KAAAR,MAEA,IAAAoF,EAAAD,QAAA,SAGA,OADAqI,GAAApI,EAAAtD,MAAA,MACArE,EAAA,EAAAgQ,EAAAD,EAAAvL,OAAAxE,EAAAgQ,EAAAhQ,IAAA,CACA,GAAAkN,GAAA6C,EAAA/P,GACAiQ,EAAAlD,EAAAG,EAEA,UAAA+C,GAAA,UAAAA,IAEA/C,IAAAiC,QAAA,cACAjC,IAAAiC,QAAA,cAGA,IAAAe,GAAAlD,EAAAE,GACAjK,EAAAgK,EAAAC,GAEAiD,EAAA,IACA,IAAAlN,EAAAyE,QAAA,SACA,GAAA0I,GAAAnN,EAAAoB,MAAA,IACApB,GAAAmN,EAAA,GACAD,EAAAC,EAAA,GAAAjD,OAOA,GAJA7K,EAAA8K,QACA9K,EAAA8K,MAAA8C,GAGAlQ,EAAA,EAAAgQ,EAAA,CACA,GAAAK,GAAAN,EAAA/P,EAAA,EACAkQ,GAAAjN,GAAA+J,EAAAqD,GACAH,EAAA,aAAAjN,GAAAkN,EACAA,EAAA,UAGA,IAAAxI,EAAAD,QAAA,SAIA,OADA4I,GAAA3I,EAAAtD,MAAA,MACArE,EAAA,EAAAgQ,EAAAM,EAAA9L,OAAAxE,EAAAgQ,EAAAhQ,IACA,GAAAA,EAAA,GAAAgQ,EAAA,CACA,GAAAO,GAAAvD,EAAAsD,EAAAtQ,IACAqQ,EAAArD,EAAAsD,EAAAtQ,EAAA,GAEAuQ,GAAA,UAAAF,EAAAtN,KAAAyN,KAAA3P,MAAA8L,EAAA2D,EAAAtQ,EAAA,MAMA,MAAAsC,GA3TA,GAAAxB,GAAAV,EAAA,GACAqN,EAAArN,EAAA,IACAuN,EAAAvN,EAAA,IACAwN,EAAAxN,EAAA,IACAyN,EAAAzN,EAAA,IACA0N,EAAA1N,EAAA,IACA2N,EAAA3N,EAAA,GACA4N,EAAA5N,EAAA,EAuTAT,GAAAD,QAAAmB,GN20BM,SAAUlB,EAAQD,EAASU,GOpoCjC,QAAA2N,GAAAzL,EAAApB,GACAA,QACAmB,EAAA5B,KAAAR,KAAAqC,EAAApB,GACAjB,KAAAwQ,WAAAxQ,KAAAqD,QAAA,eACArD,KAAAyQ,cAAA,SACAzQ,KAAA0Q,aAAA,QACA1Q,KAAAsP,OAAArO,EAAAqO,OACArO,EAAAuN,KAAAvN,EAAA0P,eAAA1P,EAAAwN,KAAAxN,EAAA2P,aACA,UAAA3P,EAAA0P,eACA3Q,KAAA0Q,aAAA,SACA1Q,KAAAyQ,cAAA,SACA,QAAAxP,EAAA0P,eACA3Q,KAAA0Q,aAAA,QACA1Q,KAAAyQ,cAAA,QAEAzQ,KAAA0Q,aAAA,QACA1Q,KAAAyQ,cAAA,UAEAxP,EAAAuN,MAAAvN,EAAA0P,eAAA1P,EAAAwN,IAAAxN,EAAA2P,aACA,UAAA3P,EAAA2P,cACA5Q,KAAAyQ,cAAA,SACAzQ,KAAA0Q,aAAA,UAEA1Q,KAAAyQ,cAAA,QACAzQ,KAAA0Q,aAAA,UAEAzP,EAAAuN,KAAAvN,EAAA0P,eAAA1P,EAAAwN,IAAAxN,EAAA2P,cAAA3P,EAAA2P,eAAA3P,EAAA0P,cACA,UAAA1P,EAAA0P,eACA3Q,KAAA0Q,aAAA,SACA1Q,KAAAyQ,cAAA,SACA,QAAAxP,EAAA0P,eACA3Q,KAAA0Q,aAAA,QACA1Q,KAAAyQ,cAAA,QAEAzQ,KAAA0Q,aAAA,QACA1Q,KAAAyQ,cAAA,WAGAzQ,KAAAyQ,cAAA,SACAzQ,KAAA0Q,aAAA,SAGA1Q,KAAAyQ,cAAAzQ,KAAAyQ,eAAA,SACAzQ,KAAA0Q,aAAA1Q,KAAA0Q,cAAA,QAEA1Q,KAAAkD,KAAAI,MACAE,EAAA,EAAAxD,KAAAwQ,YAGA,IAAA9L,GAAA1E,KAAAkD,KAAAuB,UAAAC,MAAA,EAAA1E,KAAAwQ,UACA9L,MAAA,CACA,IAAAM,GAAAhF,KAAAkD,KAAAuB,UAAAO,OAAA,EAAAhF,KAAAwQ,UACAxL,MAAA,EACAA,EAAAkC,KAAA2J,IAAA,GAAAnM,EAAAM,EACA,IAAA8L,GAAApM,EAAA,EACAqM,EAAA/L,EAAA,CAEAhF,MAAAkD,KAAAI,MACAE,EAAAsN,EAAA9Q,KAAAwQ,WAAA,GAGA,IAAArD,IAAA3J,EAAAsN,EAAA5L,EAAA6L,GACA9F,IACAzH,EAAAsN,EAAApM,EAAA,EAAAQ,EAAA6L,EAAA/L,EAAA,IACAxB,EAAAsN,EAAApM,EAAA,EAAAA,EAAA,EAAAQ,EAAA6L,EAAA/L,EAAA,EAAAA,EAAA,IACAxB,EAAAsN,EAAApM,EAAA,EAAAA,EAAAQ,EAAA6L,EAAA/L,EAAA,IACAxB,EAAAsN,EAAApM,EAAA,EAAAA,EAAA,EAAAQ,EAAA6L,EAAA/L,EAAA,EAAAA,EAAA,IACAxB,EAAAsN,EAAApM,EAAA,EAAAQ,EAAA6L,EAAA/L,EAAA,IAGA1C,EAAAyI,EAAA1I,EAAA8K,EAAAlC,EAEA3I,GAAAgB,MACAwB,OAAA9E,KAAAqD,QAAA,iBACA0B,eAAA/E,KAAAqD,QAAA,cACAI,KAAAzD,KAAAqD,QAAA,UAEApC,EAAA+C,MAAA1B,EAAAgB,KAAA,OAAArC,EAAA+C,MACA/C,EAAAgD,QAAA3B,EAAAgB,KAAA,SAAArC,EAAAgD,QACAhD,EAAA6B,MAAAR,EAAAa,KAAA7C,GAAAW,EAAA6B,KACAR,EAAAa,KAAAC,aAAA,QAAApD,KAAAqD,QAAA,UAEArD,KAAAkD,KAAAI,MACA4B,EAAA5C,EAAAmC,UAAAO,OAAA,IAGAhF,KAAAuC,MAAAqC,KAAAtC,GACAA,EAAA2C,aAAAjF,KAAAkD,MAEAlD,KAAAmF,aA9FA,GAAA/C,GAAAjC,EAAA,GACAgC,EAAAhC,EAAA,GAAAgC,SACAiD,EAAAjF,EAAA,GACA4K,EAAA3F,EAAA2F,QA6FA5I,GAAA2L,EAAA1L,GAEA0L,EAAApM,UAAA8E,OAAA,WAEAxG,KAAAyQ,gBACAzQ,UAAAyQ,cAAA,WAAAzQ,KAAAgR,YAGAhR,KAAA0Q,eACA1Q,UAAA0Q,aAAA,WAAA1Q,KAAAiR,UAGA,IAAAvK,GAAA1G,KAAAqD,QAAA,cAEA,IAAArD,KAAAkR,cAAA,CACA,GAAA7J,GAAArH,KAAAqG,WAEArG,MAAAkR,cAAAtK,eACA5G,KAAAkR,cAAAhL,OAAAlG,KAAA+F,OAAA/F,KAAAgF,OAAA0B,GACA1G,KAAAkR,cAAAjL,KAAAoB,EAAA7D,EAAAxD,KAAAkR,cAAAxM,MAAA,GACA1E,KAAAkR,cAAAtK,cAAA,EAEA5G,KAAAkR,cAAA1K,UAIA,GAAAxG,KAAAmR,aAAA,CACA,GAAAxK,GAAA3G,KAAAuG,UAEA,KAAAvG,KAAAmR,aAAAvK,aAAA,CAEA5G,KAAAmR,aAAAhL,KAAAQ,EAAAzB,EAAAlF,KAAAmR,aAAAnM,OAAA,GACAhF,KAAAmR,aAAAnL,OAAAhG,KAAAuC,MAAAkC,UAAAjB,EAAAxD,KAAA0E,MAAAgC,EAEA,IAAAD,GAAAzG,MACA,QAAA6G,KAGA,OADAC,GADAC,GAAA,EAEAhH,EAAA,EAAAiH,EAAAP,EAAApE,MAAAsD,QAAApB,OAAAxE,EAAAiH,EAAAjH,IAGA,GAFA+G,EAAAL,EAAApE,MAAAsD,QAAA5F,IAEA0G,EAAA6I,OAAA,sBAAA7I,EAAA6I,OAAA,eACA,GAAArI,GAAAC,KAAAC,IAAAL,EAAAjB,YAAArC,EAAAiD,EAAA0K,aAAAtL,YAAArC,EACA,IAAAsD,EAAAjB,YAAAX,EAAAuB,EAAA0K,aAAAtL,YAAAX,GAAA+B,GAAAR,EAAA0K,aAAAzM,MAAA,GACAqC,GAAA,CACA,QAKAA,IACAN,EAAA0K,aAAAlL,KAAAa,EAAAhB,OAAAgB,EAAApC,MAAAgC,GACAG,QAIA7G,KAAAmR,aAAAvK,cAAA,EAEA5G,KAAAmR,aAAA3K,YAKAsH,EAAApM,UAAA4F,YAAA,WACAtH,KAAAgR,YACAhR,KAAAuH,WAAAvH,KAAAgR,WAAAhR,KAAAqD,QAAA,YAAArD,KAAAyQ,eAGAzQ,KAAAiR,WACAjR,KAAAuH,WAAAvH,KAAAiR,UAAAjR,KAAAqD,QAAA,WAAArD,KAAA0Q,eAIAhR,EAAAD,QAAAqO,GPmpCM,SAAUpO,EAAQD,EAASU,GQzzCjC,QAAA4N,GAAA1L,EAAApB,GACA,GAAAqB,GAAAD,EAAAG,MAAA4O,KAAA,QACAnQ,SACAmB,EAAA5B,KAAAR,KAAAqC,EAAApB,EAAAqB,GACAtC,KAAAwQ,WAAAxQ,KAAAqD,QAAA,eACArD,KAAAqR,gBAAA,SACArR,KAAAsR,gBAAA,QACAtR,KAAAuR,gBAAA,MACAvR,KAAAsP,OAAArO,EAAAqO,OACA,UAAArO,EAAAuQ,iBAAAvQ,IAAAuQ,iBAAAvQ,EAAA+B,OACA/B,IAAAuQ,gBAAAvQ,EAAA+B,MAEA,UAAA/B,EAAAuQ,iBAAAvQ,IAAAuQ,iBAAAvQ,EAAA+B,OACA/B,IAAAuQ,gBAAAvQ,EAAA+B,MAEA,UAAA/B,EAAAuQ,iBAAAvQ,IAAAuQ,iBAAAvQ,EAAA+B,OACA/B,IAAAuQ,gBAAAvQ,EAAA+B,MAGA/B,EAAAyN,OAAAzN,EAAAwQ,iBAAAxQ,EAAA0N,QAAA1N,EAAAyQ,iBAAAzQ,EAAA2N,QAAA3N,EAAA0Q,gBACA,UAAA1Q,EAAAwQ,iBACAzR,KAAAsR,gBAAA,SACAtR,KAAAqR,gBAAA,QACArR,KAAAuR,gBAAA,OACA,QAAAtQ,EAAAwQ,iBACAzR,KAAAsR,gBAAA,QACAtR,KAAAqR,gBAAA,MACArR,KAAAuR,gBAAA,UACA,SAAAtQ,EAAAwQ,iBACAzR,KAAAsR,gBAAA,QACAtR,KAAAqR,gBAAA,OACArR,KAAAuR,gBAAA,WAEAvR,KAAAsR,gBAAA,QACAtR,KAAAqR,gBAAA,SACArR,KAAAuR,gBAAA,OAEAtQ,EAAAyN,QAAAzN,EAAAwQ,iBAAAxQ,EAAA0N,OAAA1N,EAAAyQ,iBAAAzQ,EAAA2N,QAAA3N,EAAA0Q,gBACA,UAAA1Q,EAAAyQ,iBACA1R,KAAAqR,gBAAA,SACArR,KAAAsR,gBAAA,QACAtR,KAAAuR,gBAAA,OACA,SAAAtQ,EAAAyQ,iBACA1R,KAAAqR,gBAAA,SACArR,KAAAsR,gBAAA,OACAtR,KAAAuR,gBAAA,UAEAvR,KAAAqR,gBAAA,QACArR,KAAAsR,gBAAA,SACAtR,KAAAuR,gBAAA,OAEAtQ,EAAAyN,QAAAzN,EAAAwQ,iBAAAxQ,EAAA0N,QAAA1N,EAAAyQ,iBAAAzQ,EAAA2N,OAAA3N,EAAA0Q,gBACA,UAAA1Q,EAAAyQ,iBACA1R,KAAAqR,gBAAA,SACArR,KAAAsR,gBAAA,MACAtR,KAAAuR,gBAAA,SACA,SAAAtQ,EAAAyQ,iBACA1R,KAAAqR,gBAAA,SACArR,KAAAsR,gBAAA,QACAtR,KAAAuR,gBAAA,SAEAvR,KAAAqR,gBAAA,QACArR,KAAAsR,gBAAA,SACAtR,KAAAuR,gBAAA,QAGAvR,KAAAqR,gBAAApQ,EAAAwQ,gBACAzR,KAAAsR,gBAAArQ,EAAAyQ,gBACA1R,KAAAuR,gBAAAtQ,EAAA0Q,iBAGA3R,KAAAqR,gBAAArR,KAAAqR,iBAAA,SACArR,KAAAsR,gBAAAtR,KAAAsR,iBAAA,QACAtR,KAAAuR,gBAAAvR,KAAAuR,iBAAA,MAEAvR,KAAAmF,aA9EA,GAAA/C,GAAAjC,EAAA,GACAgC,EAAAhC,EAAA,GAAAgC,QA+EAA,GAAA4L,EAAA3L,GAEA2L,EAAArM,UAAA8E,OAAA,WAEAxG,KAAAqR,kBACArR,UAAAqR,gBAAA,WAAArR,KAAA4R,cAGA5R,KAAAsR,kBACAtR,UAAAsR,gBAAA,WAAAtR,KAAA6R,cAGA7R,KAAAuR,kBACAvR,UAAAuR,gBAAA,WAAAvR,KAAA8R,aAGA,IAAApL,GAAA1G,KAAAqD,QAAA,cAEA,IAAArD,KAAAkR,cAAA,CACA,GAAA7J,GAAArH,KAAAqG,WAEArG,MAAAkR,cAAAtK,eACA5G,KAAAkR,cAAAhL,OAAAlG,KAAA+F,OAAA/F,KAAAgF,OAAA0B,GACA1G,KAAAkR,cAAAjL,KAAAoB,EAAA7D,EAAAxD,KAAAkR,cAAAxM,MAAA,GACA1E,KAAAkR,cAAAtK,cAAA,EAEA5G,KAAAkR,cAAA1K,UAIA,GAAAxG,KAAA+R,WAAA,CACA,GAAAC,GAAAhS,KAAAoG,QAEApG,MAAA+R,WAAAnL,eACA5G,KAAA+R,WAAA7L,OAAAlG,KAAA+F,OAAA/F,KAAA+R,WAAA/M,OAAA0B,GACA1G,KAAA+R,WAAA9L,KAAA+L,EAAAxO,EAAAxD,KAAA+R,WAAArN,OACA1E,KAAA+R,WAAAnL,cAAA,EAEA5G,KAAA+R,WAAAvL,UAIA,GAAAC,GAAAzG,IAEA,IAAAA,KAAAiS,YAAA,CACA,GAAA7K,GAAApH,KAAAsG,SAEAtG,MAAAiS,YAAArL,eACA5G,KAAAiS,YAAA9L,KAAAiB,EAAAlC,EAAAlF,KAAAiS,YAAAjN,OAAA,GACAhF,KAAAiS,YAAAjM,SAAAhG,KAAAuC,MAAAkC,UAAAjB,EAAAxD,KAAA0E,MAAAgC,IACA,QAAAG,KAGA,OADAC,GADAC,GAAA,EAEAhH,EAAA,EAAAiH,EAAAP,EAAApE,MAAAsD,QAAApB,OAAAxE,EAAAiH,EAAAjH,IAGA,GAFA+G,EAAAL,EAAApE,MAAAsD,QAAA5F,IAEA0G,EAAA6I,OAAA,sBAAA7I,EAAA6I,OAAA,eACA,GAAArI,GAAAC,KAAAC,IAAAL,EAAAjB,YAAArC,EAAAiD,EAAAwL,YAAApM,YAAArC,EACA,IAAAsD,EAAAjB,YAAAX,EAAAuB,EAAAwL,YAAApM,YAAAX,GAAA+B,GAAAR,EAAAwL,YAAAvN,MAAA,GACAqC,GAAA,CACA,QAKAA,IACAN,EAAAwL,YAAAhM,KAAAa,EAAAhB,OAAAgB,EAAApC,MAAAgC,GACAG,QAIA7G,KAAAiS,YAAArL,cAAA,EAEA5G,KAAAiS,YAAAzL,UAIA,GAAAxG,KAAAmR,aAAA,CACA,GAAAxK,GAAA3G,KAAAuG,UAEAvG,MAAAmR,aAAAvK,eACA5G,KAAAmR,aAAAhL,KAAAQ,EAAAzB,EAAAlF,KAAAmR,aAAAnM,OAAA,GACAhF,KAAAmR,aAAAnL,OAAAhG,KAAAuC,MAAAkC,UAAAjB,EAAAxD,KAAA0E,MAAAgC,GACA,QAAAG,KAGA,OADAC,GADAC,GAAA,EAEAhH,EAAA,EAAAiH,EAAAP,EAAApE,MAAAsD,QAAApB,OAAAxE,EAAAiH,EAAAjH,IAGA,GAFA+G,EAAAL,EAAApE,MAAAsD,QAAA5F,IAEA0G,EAAA6I,OAAA,sBAAA7I,EAAA6I,OAAA,eACA,GAAArI,GAAAC,KAAAC,IAAAL,EAAAjB,YAAArC,EAAAiD,EAAA0K,aAAAtL,YAAArC,EACA,IAAAsD,EAAAjB,YAAAX,EAAAuB,EAAA0K,aAAAtL,YAAAX,GAAA+B,GAAAR,EAAA0K,aAAAzM,MAAA,GACAqC,GAAA,CACA,QAKAA,IACAN,EAAA0K,aAAAlL,KAAAa,EAAAhB,OAAAgB,EAAApC,MAAAgC,GACAG,QAIA7G,KAAAmR,aAAAvK,cAAA,EAEA5G,KAAAmR,aAAA3K,YAKAuH,EAAArM,UAAA4F,YAAA,WACAtH,KAAA4R,cACA5R,KAAAuH,WAAAvH,KAAA4R,aAAA,GAAA5R,KAAAqR,iBAGArR,KAAA6R,cACA7R,KAAAuH,WAAAvH,KAAA6R,aAAA,GAAA7R,KAAAsR,iBAGAtR,KAAA8R,cACA9R,KAAAuH,WAAAvH,KAAA8R,aAAA,GAAA9R,KAAAuR,kBAIA7R,EAAAD,QAAAsO,GRq0CM,SAAUrO,EAAQD,EAASU,GS5gDjC,QAAAU,GAAAwM,EAAApM,GACAA,QAEAjB,KAAAwC,MAAA,GAAA0P,GAAA7E,GAEArN,KAAAiB,QAAAiB,EAAAjB,EAAAC,GAEAlB,KAAA2F,WACA3F,KAAAsJ,SACAtJ,KAAAmN,MAAA,KAfA,GAAA+E,GAAA/R,EAAA,IACA+B,EAAA/B,EAAA,GAAA+B,SACAhB,EAAAf,EAAA,GACA2N,EAAA3N,EAAA,GACA4N,EAAA5N,EAAA,EAcAU,GAAAa,UAAAyQ,OAAA,SAAA7P,GACAtC,KAAA2F,QAAA8B,QAAAnF,KAAA,GACAtC,KAAA2F,QAAAf,KAAAtC,EAGA,IAAA8P,GAAApS,IA+CA,OA7CAsC,aAAA,IACAA,EAAAkM,IAAA,SAAA6D,GAKA,MAJA/P,GAAA0O,WAAAqB,EACA/P,EAAA2O,YACA3O,EAAAiM,QAAA,GAEA6D,EAAAD,OAAAE,IAEA/P,EAAAmM,GAAA,SAAA4D,GAKA,MAJA/P,GAAA2O,UAAAoB,EACA/P,EAAA0O,aACA1O,EAAAiM,QAAA,GAEA6D,EAAAD,OAAAE,KAEA/P,YAAA,IACAA,EAAAoM,MAAA,SAAA2D,GAKA,MAJA/P,GAAAsP,aAAAS,EACA/P,EAAAuP,eACAvP,EAAAiM,QAAA,GAEA6D,EAAAD,OAAAE,IAEA/P,EAAAqM,MAAA,SAAA0D,GAKA,MAJA/P,GAAAuP,aAAAQ,EACA/P,EAAAwP,eACAxP,EAAAiM,QAAA,GAEA6D,EAAAD,OAAAE,IAEA/P,EAAAsM,MAAA,SAAAyD,GAKA,MAJA/P,GAAAwP,aAAAO,EACA/P,EAAAsP,eACAtP,EAAAiM,QAAA,GAEA6D,EAAAD,OAAAE,KAGA/P,EAAAuM,KAAA,SAAAwD,GAGA,MAFA/P,GAAAU,KAAAqP,EACA/P,EAAAiM,QAAA,EACA6D,EAAAD,OAAAE,IAIA/P,GAGAzB,EAAAa,UAAA4M,UAAA,SAAAhM,GAEA,MADAtC,MAAAmN,MAAA7K,EACAtC,KAAAmS,OAAA7P,IAGAzB,EAAAa,UAAA8E,OAAA,WACA,GAQAlE,GACAoF,EATAxD,EAAA,EACAoO,EAAA,EACAvS,EAAA,EACAiH,EAAA,EACA0B,EAAA,EACA6J,EAAA,EACAC,EAAA,EACAC,EAAA,CAIA,KAAA1S,EAAA,EAAAiH,EAAAhH,KAAA2F,QAAApB,OAAAxE,EAAAiH,EAAAjH,IACAuC,EAAAtC,KAAA2F,QAAA5F,GACAuC,EAAAoC,MAAAR,IACAA,EAAA5B,EAAAoC,OAEApC,EAAA0C,OAAAsN,IACAA,EAAAhQ,EAAA0C,OAIA,KAAAjF,EAAA,EAAAiH,EAAAhH,KAAA2F,QAAApB,OAAAxE,EAAAiH,EAAAjH,IACAuC,EAAAtC,KAAA2F,QAAA5F,GACAuC,EAAA0D,OAAAhG,KAAAiB,QAAAuC,GAAAU,EAAA5B,EAAAoC,OAAA,EAAA1E,KAAAiB,QAAA,eACAqB,EAAA4D,OAAAlG,KAAAiB,QAAAiE,GAAAoN,EAAAhQ,EAAA0C,QAAA,EAAAhF,KAAAiB,QAAA,cASA,KANAjB,KAAAmN,MAAA3G,SAMAzG,EAAA,EAAAiH,EAAAhH,KAAA2F,QAAApB,OAAAxE,EAAAiH,EAAAjH,IACAuC,EAAAtC,KAAA2F,QAAA5F,GACAuC,EAAAgF,aAGAoB,GAAA1I,KAAA8K,YAEA,IAAAtH,GACA0B,CAEA,KAAAnF,EAAA,EAAAiH,EAAAhH,KAAA2F,QAAApB,OAAAxE,EAAAiH,EAAAjH,IACAuC,EAAAtC,KAAA2F,QAAA5F,GACAyD,EAAAlB,EAAAwD,OAAAxD,EAAAoC,MACAQ,EAAA5C,EAAAyD,OAAAzD,EAAA0C,OACAxB,EAAAkF,IACAA,EAAAlF,GAEA0B,EAAAqN,IACAA,EAAArN,EAIA,KAAAnF,EAAA,EAAAiH,EAAAhH,KAAAsJ,MAAA/E,OAAAxE,EAAAiH,EAAAjH,IAAA,CACA2H,EAAA1H,KAAAsJ,MAAAvJ,GAAA0E,UACAjB,EAAAkE,EAAAlE,EACA0B,EAAAwC,EAAAxC,CACA,IAAAwN,GAAAhL,EAAAgL,GACAC,EAAAjL,EAAAiL,EACAnP,GAAAgP,IACAA,EAAAhP,GAEA0B,EAAAuN,IACAA,EAAAvN,GAEAwN,EAAAhK,IACAA,EAAAgK,GAEAC,EAAAJ,IACAA,EAAAI,GAIA,GAAAC,GAAA5S,KAAAiB,QAAA,MACA4R,EAAA7S,KAAAiB,QAAA,aAEAjB,MAAA6K,gBAAA2H,MAAAxS,KAAA6K,iBAEA2H,EAAA,IAAAA,GAAAK,GACAJ,EAAA,IAAAA,GAAAI,EAEA,IAAAnO,GAAAgE,EAAAmK,EAAAL,EACAxN,EAAAuN,EAAAM,EAAAJ,CAEAzS,MAAAwC,MAAAsQ,QAAApO,EAAAkO,EAAA5N,EAAA4N,GACA5S,KAAAwC,MAAAuQ,WAAAP,EAAAC,EAAA/N,EAAAM,GAAA,IAGAnE,EAAAa,UAAAuM,MAAA,WACA,GAAAjO,KAAAwC,MAAA,CACA,GAAAwQ,GAAAhT,KAAAwC,MAAAyQ,MACAD,GAAAE,WAAAC,YAAAH,KAIAtT,EAAAD,QAAAoB,GT2hDM,SAAUnB,EAAQD,GU1sDxBC,EAAAD,SACA+D,EAAA,EACA0B,EAAA,EACAkO,aAAA,EACAC,cAAA,GACAC,cAAA,GACA5P,YAAA,GACA6P,aAAA,QAIAC,aAAA,QACAC,gBAAA,QACAhQ,KAAA,QACAiQ,WAAA,MACAC,UAAA,KACApI,YAAA,QACAqI,MAAA,YACAhB,MAAA,EACAjN,SACAwH,SACA0G,OACAC,aACAC,eACAC,aACAC,cACAC,eV4tDM,SAAUxU,EAAQD,GWtvDxB0U,MAAAzS,UAAA+F,UACA0M,MAAAzS,UAAA+F,QAAA,SAAA2M,GACA,YACA,WAAApU,KACA,SAAAqU,UAEA,IAAAC,GAAA9S,OAAAxB,MACAgH,EAAAsN,EAAA/P,SAAA,CACA,QAAAyC,EACA,QAEA,IAAAuN,GAAA,CASA,IARAC,UAAAjQ,OAAA,IACAgQ,EAAAE,OAAAD,UAAA,IACAD,KACAA,EAAA,EACA,IAAAA,MAAAG,KAAAH,KAAAG,OACAH,KAAA,OAAArN,KAAAyN,MAAAzN,KAAAC,IAAAoN,MAGAA,GAAAvN,EACA,QAGA,KADA,GAAA4N,GAAAL,GAAA,EAAAA,EAAArN,KAAA2J,IAAA7J,EAAAE,KAAAC,IAAAoN,GAAA,GACAK,EAAA5N,EAAA4N,IACA,GAAAA,IAAAN,MAAAM,KAAAR,EACA,MAAAQ,EAGA,YAKAT,MAAAzS,UAAAmT,cACAV,MAAAzS,UAAAmT,YAAA,SAAAT,GACA,YACA,WAAApU,KACA,SAAAqU,UAEA,IAAAC,GAAA9S,OAAAxB,MACAgH,EAAAsN,EAAA/P,SAAA,CACA,QAAAyC,EACA,QAEA,IAAAuN,GAAAvN,CACAwN,WAAAjQ,OAAA,IACAgQ,EAAAE,OAAAD,UAAA,IACAD,KACAA,EAAA,EACA,IAAAA,MAAA,KAAAA,KAAA,OACAA,KAAA,OAAArN,KAAAyN,MAAAzN,KAAAC,IAAAoN,KAIA,KADA,GAAAK,GAAAL,GAAA,EAAArN,KAAA4N,IAAAP,EAAAvN,EAAA,GAAAA,EAAAE,KAAAC,IAAAoN,GACAK,GAAA,EAAAA,IACA,GAAAA,IAAAN,MAAAM,KAAAR,EACA,MAAAQ,EAGA,YAIAG,OAAArT,UAAAwL,OACA6H,OAAArT,UAAAwL,KAAA,WACA,MAAAlN,MAAAkP,QAAA,oBXkwDM,SAAUxP,EAAQD,EAASU,GYl0DjC,QAAAuN,GAAArL,EAAApB,GACA,GAAAqB,GAAAD,EAAAG,MAAA4O,KAAA,WACAnQ,SACAA,EAAAiC,KAAAjC,EAAAiC,MAAA,MACAd,EAAA5B,KAAAR,KAAAqC,EAAApB,EAAAqB,GAPA,GAAAF,GAAAjC,EAAA,GACAgC,EAAAhC,EAAA,GAAAgC,QAQAA,GAAAuL,EAAAtL,GAEA1C,EAAAD,QAAAiO,GZ+0DM,SAAUhO,EAAQD,EAASU,Gar1DjC,QAAAyN,GAAAvL,EAAApB,GACAA,QACAmB,EAAA5B,KAAAR,KAAAqC,EAAApB,GACAjB,KAAAwQ,WAAAxQ,KAAAqD,QAAA,eAEArD,KAAAkD,KAAAI,MACAE,EAAA,EAAAxD,KAAAwQ,YAGA,IAAA9L,GAAA1E,KAAAkD,KAAAuB,UAAAC,MAAA,EAAA1E,KAAAwQ,WACAxL,EAAAhF,KAAAkD,KAAAuB,UAAAO,OAAA,EAAAhF,KAAAwQ,WACAM,EAAA9Q,KAAAwQ,WACAO,EAAA/L,EAAA,EAEAmI,GAAA3J,EAAAsN,EAAA5L,EAAA6L,GACA9F,IACAzH,EAAAsN,EAAA9Q,KAAAwQ,WAAAtL,EAAAF,IACAxB,EAAAsN,EAAA9Q,KAAAwQ,WAAA9L,EAAAQ,EAAAF,IACAxB,EAAAsN,EAAA9Q,KAAAwQ,WAAA9L,EAAA,EAAA1E,KAAAwQ,WAAAtL,EAAA,IACA1B,EAAAsN,EAAA9Q,KAAAwQ,WAAA,EAAAxQ,KAAAwQ,WAAAtL,EAAA,IACA1B,EAAAsN,EAAA5L,EAAA6L,IAGAzO,EAAAyI,EAAA1I,EAAA8K,EAAAlC,EAEA3I,GAAAgB,MACAwB,OAAA9E,KAAAqD,QAAA,iBACA0B,eAAA/E,KAAAqD,QAAA,cACAI,KAAAzD,KAAAqD,QAAA,UAEApC,EAAA+C,MAAA1B,EAAAgB,KAAA,OAAArC,EAAA+C,MACA/C,EAAAgD,QAAA3B,EAAAgB,KAAA,SAAArC,EAAAgD,QACAhD,EAAA6B,MAAAR,EAAAa,KAAA7C,GAAAW,EAAA6B,KACAR,EAAAa,KAAAC,aAAA,QAAApD,KAAAqD,QAAA,UAEArD,KAAAkD,KAAAI,MACA4B,EAAA5C,EAAAmC,UAAAO,OAAA,IAGAhF,KAAAuC,MAAAqC,KAAAtC,GACAA,EAAA2C,aAAAjF,KAAAkD,MAEAlD,KAAAmF,aA/CA,GAAA/C,GAAAjC,EAAA,GACAgC,EAAAhC,EAAA,GAAAgC,SACAiD,EAAAjF,EAAA,GACA4K,EAAA3F,EAAA2F,QA8CA5I,GAAAyL,EAAAxL,GAEAwL,EAAAlM,UAAA4E,QAAA,WACA,GAAApB,GAAAlF,KAAA+F,OAAA/F,KAAAuC,MAAAkC,UAAAO,OAAA,EACAxB,EAAAxD,KAAA8F,OAAA9F,KAAAwQ,UACA,QAAAhN,IAAA0B,MAGA0I,EAAAlM,UAAA6E,SAAA,WACA,GAAArB,GAAAlF,KAAA+F,OAAA/F,KAAAuC,MAAAkC,UAAAO,OAAA,EACAxB,EAAAxD,KAAA8F,OAAA9F,KAAAuC,MAAAkC,UAAAC,MAAA1E,KAAAwQ,UACA,QAAAhN,IAAA0B,MAGAxF,EAAAD,QAAAmO,Gbo2DM,SAAUlO,EAAQD,EAASU,Gch6DjC,QAAAwN,GAAAtL,EAAApB,GACA,GAAAqB,GAAAD,EAAAG,MAAA4O,KAAA,QACAnQ,SACAmB,EAAA5B,KAAAR,KAAAqC,EAAApB,EAAAqB,GANA,GAAAF,GAAAjC,EAAA,GACAgC,EAAAhC,EAAA,GAAAgC,QAOAA,GAAAwL,EAAAvL,GAEA1C,EAAAD,QAAAkO,Gd66DM,SAAUjO,EAAQD,EAASU,Gep7DjC,QAAAqN,GAAAnL,EAAApB,GACA,GAAAqB,GAAAD,EAAAG,MAAA4O,KAAA,WACAnQ,SACAA,EAAAiC,KAAAjC,EAAAiC,MAAA,QACAd,EAAA5B,KAAAR,KAAAqC,EAAApB,EAAAqB,GAPA,GAAAF,GAAAjC,EAAA,GACAgC,EAAAhC,EAAA,GAAAgC,QAQAA,GAAAqL,EAAApL,GAEA1C,EAAAD,QAAA+N,Gfw9DM,SAAU9N,EAAQD,EAASU,GgBh+DjC,QAAA0N,GAAAxL,EAAApB,GACA,GAAAqB,GAAAD,EAAAG,MAAA4O,KAAA,QACAnQ,SACAmB,EAAA5B,KAAAR,KAAAqC,EAAApB,EAAAqB,GAEAA,EAAAgB,MACAoB,MAAA1E,KAAAkD,KAAAuB,UAAAC,MAAA,EAAA1E,KAAAqD,QAAA,iBAGArD,KAAAkD,KAAAI,MACAE,EAAA,EAAAxD,KAAAqD,QAAA,gBAGA,IAAA2R,GAAA3S,EAAAG,MAAA4O,KAAA,QACA4D,GAAA1R,MACAE,EAAAxD,KAAAqD,QAAA,eACAyB,OAAA9E,KAAAqD,QAAA,iBACA0B,eAAA/E,KAAAqD,QAAA,cACAqB,MAAA1E,KAAAkD,KAAAuB,UAAAC,MAAA,EAAA1E,KAAAqD,QAAA,eACA2B,OAAAhF,KAAAkD,KAAAuB,UAAAO,OAAA,EAAAhF,KAAAqD,QAAA,eACAI,KAAAzD,KAAAqD,QAAA,UAEApC,EAAA6B,MAAAkS,EAAA7R,KAAA7C,GAAAW,EAAA6B,IAAA,IAEA,IAAAa,GAAA3D,KAAAqD,QAAA,QACAO,EAAA5D,KAAAqD,QAAA,eACAQ,EAAA7D,KAAAqD,QAAA,cAEAM,IAAAqR,EAAA1R,MAAAK,SACAC,GAAAoR,EAAA1R,MAAAQ,cAAAF,IACAC,GAAAmR,EAAA1R,MAAAS,cAAAF,IAEA5C,EAAA+C,MAAAgR,EAAA1R,KAAA,OAAArC,EAAA+C,MACA/C,EAAAgD,QAAA+Q,EAAA1R,KAAA,SAAArC,EAAAgD,QACAjE,KAAAuC,MAAAqC,KAAAoQ,GACAA,EAAA/P,aAAAjF,KAAAkD,MAEAlD,KAAAmF,aAxCA,GAAA/C,GAAAjC,EAAA,GACAgC,EAAAhC,EAAA,GAAAgC,QAyCAA,GAAA0L,EAAAzL,GAEA1C,EAAAD,QAAAoO,GhB6+DM,SAAUnO,EAAQD,EAASU,GiBzhEjC,sBAAA8U,QAAA,CACA,GAAArU,GAAAT,EAAA,IACA,SAAA+U,GACAA,EAAAC,GAAA/C,UAAA,SAAAnR,GACA,MAAAjB,MAAAoV,KAAA,WACA,GAAAC,GAAAH,EAAAlV,MACAqC,EAAAzB,EAAAyU,EAAAnS,OACAmS,GAAAC,KAAA,IACAjT,EAAA+K,QAAApN,KAAAiB,OAGAgU,UjBoiEM,SAAUvV,EAAQD,GkB/iExBC,EAAAD,QAAAQ","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\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 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 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 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 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 lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\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 line = drawLine(this.chart, right, symbolLeft, text);\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 line = drawLine(this.chart, left, symbolRight, text);\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 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},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\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 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},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\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 if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\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},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\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 line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\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 line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\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 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},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\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 line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\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 line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\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 line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y},\n\t {x: diffX, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\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},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'top')) {\n\t line = drawLine(this.chart, top, [\n\t {x: top.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\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 var len;\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 len += 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\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 x += chart.options['text-margin']/2;\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': 'start',\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 };\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 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 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[0].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.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 // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\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 realSymb = getSymbol(flowSymb);\n\t var next = getNextPath(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 (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (i + 1 < lenS) {\n\t var nextSymb = flowSymbols[i + 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 i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n\t if ((i + 1) != lenS) {\n\t var curSymb = getSymbol(lineStyleSymbols[i]);\n\t var nextSymb = getSymbol(lineStyleSymbols[i+1]);\n\t\n\t curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i + 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/* 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.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t this.params = options.params;\n\t if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n\t if (options.direction_yes === 'right') {\n\t this.no_direction = 'bottom';\n\t this.yes_direction = 'right';\n\t } else if (options.direction_yes === 'top') {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'top';\n\t } else {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n\t if (options.direction_no === 'right') {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t } else {\n\t this.yes_direction = 'right';\n\t this.no_direction = 'bottom';\n\t }\n\t } else if (options.yes && options.direction_yes && options.no && options.direction_no && options.direction_no !== options.direction_yes) {\n\t if (options.direction_yes === 'right') {\n\t this.no_direction = 'bottom';\n\t this.yes_direction = 'right';\n\t } else if (options.direction_yes === 'top') {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'top';\n\t } else {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\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 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\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, 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.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 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 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 x = symbol.getX() + symbol.width;\n\t y = symbol.getY() + symbol.height;\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.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\t(function( $ ) {\n\t\t\t$.fn.flowChart = function( options ) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tchart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\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 d3ecf33745c811efe3d7","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\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 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 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 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 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 lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n line = drawLine(this.chart, right, symbolLeft, text);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n line = drawLine(this.chart, left, symbolRight, text);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\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},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\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},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\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},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\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 line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\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 line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\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 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},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\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 line = drawLine(this.chart, left, [\n {x: diffX, y: left.y},\n {x: diffX, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\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},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'top')) {\n line = drawLine(this.chart, top, [\n {x: top.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\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 var len;\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 len += 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\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 x += chart.options['text-margin']/2;\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': 'start',\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 };\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 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 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[0].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.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 // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\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 realSymb = getSymbol(flowSymb);\n var next = getNextPath(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 (!chart.start) {\n chart.start = realSymb;\n }\n\n if (i + 1 < lenS) {\n var nextSymb = flowSymbols[i + 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 i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n if ((i + 1) != lenS) {\n var curSymb = getSymbol(lineStyleSymbols[i]);\n var nextSymb = getSymbol(lineStyleSymbols[i+1]);\n\n curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i + 1]));\n }\n }\n }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\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.textMargin = this.getAttr('text-margin');\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n this.params = options.params;\n if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n if (options.direction_yes === 'right') {\n this.no_direction = 'bottom';\n this.yes_direction = 'right';\n } else if (options.direction_yes === 'top') {\n this.no_direction = 'right';\n this.yes_direction = 'top';\n } else {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n if (options.direction_no === 'right') {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n } else {\n this.yes_direction = 'right';\n this.no_direction = 'bottom';\n }\n } else if (options.yes && options.direction_yes && options.no && options.direction_no && options.direction_no !== options.direction_yes) {\n if (options.direction_yes === 'right') {\n this.no_direction = 'bottom';\n this.yes_direction = 'right';\n } else if (options.direction_yes === 'top') {\n this.no_direction = 'right';\n this.yes_direction = 'top';\n } else {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\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 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\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, 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 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 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 x = symbol.getX() + symbol.width;\n y = symbol.getY() + symbol.height;\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.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\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\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 bf0c1bc10daac91c34c6","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","next_direction","next","undefined","text","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","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","right","bottom","top","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","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","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getStyle","s","startIndex","endIndex","getSymbValue","getSymbol","getNextPath","flowSymb","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","flowSymbols","lenS","symbVal","realSymb","direction","condOpt","nextSymb","lineStyleSymbols","curSymb","JSON","textMargin","yes_direction","no_direction","direction_yes","direction_no","max","startX","startY","yes_symbol","no_symbol","bottom_symbol","right_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","left_symbol","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","minX","minY","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","$","fn","each","$this","html"],"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\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 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 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 lineLength = this.getAttr('line-length'),\n\t lineWith = this.getAttr('line-width');\n\t\n\t if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t line = drawLine(this.chart, bottom, symbolTop, text);\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 line = drawLine(this.chart, right, symbolLeft, text);\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 line = drawLine(this.chart, left, symbolRight, text);\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 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},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\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 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},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\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 if (this.leftEnd && isUpper) {\n\t line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\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},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t }\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 line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\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 line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\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 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},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\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 line = drawLine(this.chart, right, [\n\t {x: symbolTop.x, y: right.y},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\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 line = drawLine(this.chart, bottom, [\n\t {x: bottom.x, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n\t {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\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 line = drawLine(this.chart, left, [\n\t {x: diffX, y: left.y},\n\t {x: diffX, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'left')) {\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},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\n\t this.leftStart = true;\n\t symbol.topEnd = true;\n\t maxX = left.x;\n\t } else if ((origin === 'top')) {\n\t line = drawLine(this.chart, top, [\n\t {x: top.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t {x: symbolTop.x, y: symbolTop.y}\n\t ], text);\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 var len;\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 len += 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\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 x += chart.options['text-margin']/2;\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': 'start',\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 };\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 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 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[0].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.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 // flow\n\t var flowSymbols = line.split('->');\n\t for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t var flowSymb = flowSymbols[i];\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 realSymb = getSymbol(flowSymb);\n\t var next = getNextPath(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 (!chart.start) {\n\t chart.start = realSymb;\n\t }\n\t\n\t if (i + 1 < lenS) {\n\t var nextSymb = flowSymbols[i + 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 i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n\t if ((i + 1) != lenS) {\n\t var curSymb = getSymbol(lineStyleSymbols[i]);\n\t var nextSymb = getSymbol(lineStyleSymbols[i+1]);\n\t\n\t curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i + 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/* 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.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t this.params = options.params;\n\t if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n\t if (options.direction_yes === 'right') {\n\t this.no_direction = 'bottom';\n\t this.yes_direction = 'right';\n\t } else if (options.direction_yes === 'top') {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'top';\n\t } else {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n\t if (options.direction_no === 'right') {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t } else {\n\t this.yes_direction = 'right';\n\t this.no_direction = 'bottom';\n\t }\n\t } else if (options.yes && options.direction_yes && options.no && options.direction_no && options.direction_no !== options.direction_yes) {\n\t if (options.direction_yes === 'right') {\n\t this.no_direction = 'bottom';\n\t this.yes_direction = 'right';\n\t } else if (options.direction_yes === 'top') {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'top';\n\t } else {\n\t this.no_direction = 'right';\n\t this.yes_direction = 'bottom';\n\t }\n\t } else {\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\n\t }\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\n\tCondition.prototype.renderLines = function() {\n\t if (this.yes_symbol) {\n\t this.drawLineTo(this.yes_symbol, 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.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 x = symbol.getX() + symbol.width;\n\t y = symbol.getY() + symbol.height;\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.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\t(function( $ ) {\n\t\t\t$.fn.flowChart = function( options ) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tchart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\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 bf0c1bc10daac91c34c6","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\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 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 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 lineLength = this.getAttr('line-length'),\n lineWith = this.getAttr('line-width');\n\n if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n line = drawLine(this.chart, bottom, symbolTop, text);\n this.bottomStart = true;\n symbol.topEnd = true;\n maxX = bottom.x;\n } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n line = drawLine(this.chart, right, symbolLeft, text);\n this.rightStart = true;\n symbol.leftEnd = true;\n maxX = symbolLeft.x;\n } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n line = drawLine(this.chart, left, symbolRight, text);\n this.leftStart = true;\n symbol.rightEnd = true;\n maxX = symbolRight.x;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\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},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\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},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((!origin || origin === 'bottom') && isLeft) {\n if (this.leftEnd && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\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},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n }\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 line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\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 line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\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 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},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'right') && isRight) {\n line = drawLine(this.chart, right, [\n {x: symbolTop.x, y: right.y},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.rightStart = true;\n symbol.topEnd = true;\n maxX = right.x + lineLength/2;\n } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n line = drawLine(this.chart, bottom, [\n {x: bottom.x, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\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 line = drawLine(this.chart, left, [\n {x: diffX, y: left.y},\n {x: diffX, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'left')) {\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},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\n this.leftStart = true;\n symbol.topEnd = true;\n maxX = left.x;\n } else if ((origin === 'top')) {\n line = drawLine(this.chart, top, [\n {x: top.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n {x: symbolTop.x, y: symbolTop.y}\n ], text);\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 var len;\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 len += 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\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 x += chart.options['text-margin']/2;\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': 'start',\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 };\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 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 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[0].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.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 // flow\n var flowSymbols = line.split('->');\n for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n var flowSymb = flowSymbols[i];\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 realSymb = getSymbol(flowSymb);\n var next = getNextPath(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 (!chart.start) {\n chart.start = realSymb;\n }\n\n if (i + 1 < lenS) {\n var nextSymb = flowSymbols[i + 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 i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n if ((i + 1) != lenS) {\n var curSymb = getSymbol(lineStyleSymbols[i]);\n var nextSymb = getSymbol(lineStyleSymbols[i+1]);\n\n curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i + 1]));\n }\n }\n }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\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.textMargin = this.getAttr('text-margin');\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n this.params = options.params;\n if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n if (options.direction_yes === 'right') {\n this.no_direction = 'bottom';\n this.yes_direction = 'right';\n } else if (options.direction_yes === 'top') {\n this.no_direction = 'right';\n this.yes_direction = 'top';\n } else {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n if (options.direction_no === 'right') {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n } else {\n this.yes_direction = 'right';\n this.no_direction = 'bottom';\n }\n } else if (options.yes && options.direction_yes && options.no && options.direction_no && options.direction_no !== options.direction_yes) {\n if (options.direction_yes === 'right') {\n this.no_direction = 'bottom';\n this.yes_direction = 'right';\n } else if (options.direction_yes === 'top') {\n this.no_direction = 'right';\n this.yes_direction = 'top';\n } else {\n this.no_direction = 'right';\n this.yes_direction = 'bottom';\n }\n } else {\n this.yes_direction = 'bottom';\n this.no_direction = 'right';\n }\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\nCondition.prototype.renderLines = function() {\n if (this.yes_symbol) {\n this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n }\n\n if (this.no_symbol) {\n this.drawLineTo(this.no_symbol, 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 x = symbol.getX() + symbol.width;\n y = symbol.getY() + symbol.height;\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.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\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\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 59d03841..cdede17d 100644 --- a/releasenotes.md +++ b/releasenotes.md @@ -1,3 +1,7 @@ +### v1.11.3 + +- try to optimize horizontal rendering for end symbols [#155](https://github.com/adrai/flowchart.js/issues/155) + ### v1.11.2 - try to optimize left handling [#152](https://github.com/adrai/flowchart.js/issues/152) diff --git a/src/flowchart.symbol.condition.js b/src/flowchart.symbol.condition.js index 380eb20b..e59cc646 100644 --- a/src/flowchart.symbol.condition.js +++ b/src/flowchart.symbol.condition.js @@ -145,6 +145,7 @@ Condition.prototype.render = function() { } if (hasSymbolUnder) { + if (self.right_symbol.symbolType === 'end') return; self.right_symbol.setX(symb.getX() + symb.width + lineLength); shift(); } diff --git a/src/flowchart.symbol.js b/src/flowchart.symbol.js index 60798d42..854f34b2 100644 --- a/src/flowchart.symbol.js +++ b/src/flowchart.symbol.js @@ -187,6 +187,7 @@ Symbol.prototype.render = function() { } if (hasSymbolUnder) { + if (self.next.symbolType === 'end') return; self.next.setX(symb.getX() + symb.width + lineLength); shift(); } @@ -218,6 +219,7 @@ Symbol.prototype.render = function() { } if (hasSymbolUnder) { + if (self.next.symbolType === 'end') return; self.next.setX(symb.getX() + symb.width + lineLength); shift(); } diff --git a/src/flowchart.symbol.parallel.js b/src/flowchart.symbol.parallel.js index c01b464c..4d6013db 100644 --- a/src/flowchart.symbol.parallel.js +++ b/src/flowchart.symbol.parallel.js @@ -144,6 +144,7 @@ Parallel.prototype.render = function() { } if (hasSymbolUnder) { + if (self.left_symbol.symbolType === 'end') return; self.left_symbol.setX(symb.getX() + symb.width + lineLength); shift(); } @@ -177,6 +178,7 @@ Parallel.prototype.render = function() { } if (hasSymbolUnder) { + if (self.right_symbol.symbolType === 'end') return; self.right_symbol.setX(symb.getX() + symb.width + lineLength); shift(); } From 416b627cbc91a9edf471338d0945398482d901a0 Mon Sep 17 00:00:00 2001 From: Adriano Raiano Date: Tue, 3 Jul 2018 22:05:00 +0200 Subject: [PATCH 02/66] update site --- site | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site b/site index 2e247b70..9fd513ea 160000 --- a/site +++ b/site @@ -1 +1 @@ -Subproject commit 2e247b700ae85a92014bd32f374c2e3643582834 +Subproject commit 9fd513ea94c9d43afce261fd11ab7b17cc0abcb5 From 63ad0a747a097c5ff58c1acfc2e7941b5ad511df Mon Sep 17 00:00:00 2001 From: AbdullahAbraham <38958413+AbdullahAbraham@users.noreply.github.com> Date: Tue, 31 Jul 2018 21:07:40 -0300 Subject: [PATCH 03/66] Minor formatting proposals --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a0c45087..50189327 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ flowchart.js is on [CDNJS](https://cdnjs.com/libraries/flowchart), feel free to ## Usage -On your page you need to include raphael like so: +On your page you need to include Raphaël like so: ```html @@ -93,7 +93,7 @@ and then ``` ## Advice -Symbols that should possibly not be used in the text: '=>' and '->' and ':>' and '|' and '@>' +Symbols that should possibly not be used in the text: `=>` and `->` and `:>` and `|` and `@>` If you want to emphasize a specific path in your flowchart, you can additionally define it like this: From 5156d9a0fd86a86afb56b96b93bde8c721891abe Mon Sep 17 00:00:00 2001 From: Andrea Q <49754813+ndrqu@users.noreply.github.com> Date: Mon, 27 May 2019 12:54:30 +0200 Subject: [PATCH 04/66] Added onclick function binding to chart nodes (#172) * Added onclick binding * Add pointer cursor and function parameters * Upddated README and build production js * fixed chart sample code * Updated readme and examples * Readme closing bracket fix * Fixed closing bracket * Removed nodemon dependency --- README.md | 9 +- example/index.html | 7 +- example/test.txt | 2 +- index.html | 39 +- package.json | 5 +- release/flowchart.js | 1159 +------------------------------------- release/flowchart.js.map | 2 +- src/flowchart.parse.js | 11 +- src/flowchart.symbol.js | 18 + webpack.config.js | 8 +- 10 files changed, 74 insertions(+), 1186 deletions(-) diff --git a/README.md b/README.md index 50189327..336a2b65 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ and then ``` diff --git a/example/index.html b/example/index.html index 0a75706c..26c90e49 100644 --- a/example/index.html +++ b/example/index.html @@ -71,13 +71,18 @@ })(); }; + + function myFunction(event, node) { + console.log("You just clicked this node:", node); + } +