diff --git a/README.md b/README.md index 3518042..095b88f 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ [example](https://github.com/adrai/flowchart.js/blob/master/example/index.html) #Requirements -You will need [Raphaël](http://raphaeljs.com/) +You will need [Raphaël](http://www.raphaeljs.com/) #Usage diff --git a/package.json b/package.json index ca7a800..b82c392 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "author": "adrai", "name": "flowchart.js", - "version": "1.6.1", + "version": "1.6.3", "main": "./index", "private": false, "engines": { diff --git a/release/flowchart.js b/release/flowchart.js index 37f70e6..ca620cc 100644 --- a/release/flowchart.js +++ b/release/flowchart.js @@ -1,4 +1,4 @@ -// flowchart.js, v1.6.1 +// flowchart.js, v1.6.3 // Copyright (c)yyyy Adriano Raiano (adrai). // Distributed under MIT license // http://adrai.github.io/flowchart.js @@ -253,7 +253,7 @@ this.next && (this.next_direction ? this.drawLineTo(this.next, "", this.next_direction) : this.drawLineTo(this.next)); }, Symbol.prototype.drawLineTo = function(symbol, text, origin) { this.connectedTo.indexOf(symbol) < 0 && this.connectedTo.push(symbol); - var line, x = this.getCenter().x, y = this.getCenter().y, right = this.getRight(), bottom = this.getBottom(), left = this.getLeft(), symbolX = symbol.getCenter().x, symbolY = symbol.getCenter().y, symbolTop = symbol.getTop(), symbolRight = symbol.getRight(), symbolLeft = symbol.getLeft(), isOnSameColumn = x === symbolX, isOnSameLine = y === symbolY, isUnder = symbolY > y, isUpper = y > symbolY, isLeft = x > symbolX, isRight = symbolX > x, maxX = 0, lineLength = this.getAttr("line-length"), lineWith = this.getAttr("line-width"); + var line, x = this.getCenter().x, y = this.getCenter().y, right = this.getRight(), bottom = this.getBottom(), left = this.getLeft(), symbolX = symbol.getCenter().x, symbolY = symbol.getCenter().y, symbolTop = symbol.getTop(), symbolRight = symbol.getRight(), symbolLeft = symbol.getLeft(), isOnSameColumn = x === symbolX, isOnSameLine = y === symbolY, isUnder = symbolY > y, isUpper = y > symbolY || this === symbol, isLeft = x > symbolX, isRight = symbolX > x, maxX = 0, lineLength = this.getAttr("line-length"), lineWith = this.getAttr("line-width"); if (origin && "bottom" !== origin || !isOnSameColumn || !isUnder) if (origin && "right" !== origin || !isOnSameLine || !isRight) if (origin && "left" !== origin || !isOnSameLine || !isLeft) if (origin && "right" !== origin || !isOnSameColumn || !isUpper) if (origin && "right" !== origin || !isOnSameColumn || !isUnder) if (origin && "bottom" !== origin || !isLeft) if (origin && "bottom" !== origin || !isRight) if (origin && "right" === origin && isLeft) line = drawLine(this.chart, right, [ { x: right.x + lineLength / 2, y: right.y @@ -741,7 +741,7 @@ }, FlowChart.prototype.startWith = function(symbol) { return this.start = symbol, this.handle(symbol); }, FlowChart.prototype.render = function() { - var symbol, line, maxWidth = 0, maxHeight = 0, i = 0, len = 0, maxX = 0, maxY = 0; + var symbol, line, maxWidth = 0, maxHeight = 0, i = 0, len = 0, maxX = 0, maxY = 0, minX = 0, minY = 0; for (i = 0, len = this.symbols.length; len > i; i++) symbol = this.symbols[i], symbol.width > maxWidth && (maxWidth = symbol.width), symbol.height > maxHeight && (maxHeight = symbol.height); for (i = 0, len = this.symbols.length; len > i; i++) symbol = this.symbols[i], symbol.shiftX(this.options.x + (maxWidth - symbol.width) / 2 + this.options["line-width"]), @@ -759,12 +759,13 @@ } for (i = 0, len = this.lines.length; len > i; i++) { line = this.lines[i].getBBox(); - var x = line.x2, y = line.y2; - x > maxX && (maxX = x), y > maxY && (maxY = y); + var x = line.x, y = line.y, x2 = line.x2, y2 = line.y2; + minX > x && (minX = x), minY > y && (minY = y), x2 > maxX && (maxX = x2), y2 > maxY && (maxY = y2); } var scale = this.options.scale, lineWidth = this.options["line-width"]; - this.paper.setSize(maxX * scale + lineWidth * scale, maxY * scale + lineWidth * scale), - this.paper.setViewBox(0, 0, maxX + lineWidth, maxY + lineWidth, !0); + 0 > minX && (minX -= lineWidth), 0 > minY && (minY -= lineWidth); + var width = maxX + lineWidth - minX, height = maxY + lineWidth - minY; + this.paper.setSize(width * scale, height * scale), this.paper.setViewBox(minX, minY, width, height, !0); }, FlowChart.prototype.clean = function() { if (this.paper) { var paperDom = this.paper.canvas; diff --git a/release/flowchart.js.map b/release/flowchart.js.map index 00a3697..7299ee6 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 521c43f632157d5a19a6","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.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_15__","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","next_direction","next","undefined","text","key","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","lineLength","rightPoint","isPositioned","self","shift","symb","hasSymbolUnder","len","diff","Math","abs","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","right","bottom","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","rightStart","topEnd","bottomStart","diffX","leftStart","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","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","getSymbol","s","startIndex","endIndex","getNextPath","flowSymb","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","sub","parts","join","txtAndState","pop","flowSymbols","lenS","realSymb","direction","condOpt","nextSymb","textMargin","yes_direction","no_direction","direction_yes","direction_no","max","startX","startY","yes_symbol","no_symbol","bottom_symbol","right_symbol","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","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","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","rect","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_15__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(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_15__) {\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 */ 8);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 14);\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\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 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\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 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 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.next_direction);\n\t } else {\n\t this.drawLineTo(this.next);\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 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,\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) {\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 }\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 }\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 }\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 */ 6);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 12);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 9);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 11);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 10);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 13);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\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 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 {\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 (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) {\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 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];\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],\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null\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\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 }\n\t\n\t }\n\t return chart;\n\t}\n\t\n\tmodule.exports = parse;\n\n\n/***/ },\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction Condition(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\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 {\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 {\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 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 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.chart.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 15);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 7);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\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 {\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 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 for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t var x = symbol.getX() + symbol.width;\n\t var 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 var x = line.x2;\n\t var y = line.y2;\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 var scale = this.options['scale'];\n\t var lineWidth = this.options['line-width'];\n\t this.paper.setSize((maxX * scale) + (lineWidth * scale), (maxY * scale) + (lineWidth * scale));\n\t this.paper.setViewBox(0, 0, maxX + lineWidth, maxY + lineWidth, 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/***/ },\n/* 7 */\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 }//,\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/***/ },\n/* 8 */\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/* 9 */\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/* 10 */\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/* 11 */\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/* 12 */\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/* 13 */\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/* 14 */\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/* 15 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** flowchart.js\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/** WEBPACK FOOTER **\n ** webpack/bootstrap 521c43f632157d5a19a6\n **/","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\n **/","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\n **/","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\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 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\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.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 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.next_direction);\n } else {\n this.drawLineTo(this.next);\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 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,\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) {\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 }\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 }\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\n **/","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 }\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\n **/","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');\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 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 {\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 (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) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\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];\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0],\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null\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\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 }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.parse.js\n ** module id = 4\n ** module chunks = 0\n **/","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 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 {\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 {\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 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 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\n **/","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\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 {\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 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 for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n var x = symbol.getX() + symbol.width;\n var 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 var x = line.x2;\n var y = line.y2;\n if (x > maxX) {\n maxX = x;\n }\n if (y > maxY) {\n maxY = y;\n }\n }\n\n var scale = this.options['scale'];\n var lineWidth = this.options['line-width'];\n this.paper.setSize((maxX * scale) + (lineWidth * scale), (maxY * scale) + (lineWidth * scale));\n this.paper.setViewBox(0, 0, maxX + lineWidth, maxY + lineWidth, 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/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.chart.js\n ** module id = 6\n ** module chunks = 0\n **/","// 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 }//,\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/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.defaults.js\n ** module id = 7\n ** module chunks = 0\n **/","// 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 = 8\n ** module chunks = 0\n **/","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 = 9\n ** module chunks = 0\n **/","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 = 10\n ** module chunks = 0\n **/","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 = 11\n ** module chunks = 0\n **/","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 = 12\n ** module chunks = 0\n **/","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 = 13\n ** module chunks = 0\n **/","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 = 14\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"Raphael\"\n ** module id = 15\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.js","webpack:///webpack/bootstrap 41178340126627f4fc47","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.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_15__","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","next_direction","next","undefined","text","key","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","lineLength","rightPoint","isPositioned","self","shift","symb","hasSymbolUnder","len","diff","Math","abs","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","right","bottom","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","rightStart","topEnd","bottomStart","diffX","leftStart","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","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","getSymbol","s","startIndex","endIndex","getNextPath","flowSymb","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","sub","parts","join","txtAndState","pop","flowSymbols","lenS","realSymb","direction","condOpt","nextSymb","textMargin","yes_direction","no_direction","direction_yes","direction_no","max","startX","startY","yes_symbol","no_symbol","bottom_symbol","right_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","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","rect","innerWrap","jQuery","$","fn","each","$this","html"],"mappings":";;;;;CAAA,SAAAA,MAAAC;IACA,uBAAAC,WAAA,mBAAAC,QACAA,OAAAD,UAAAD,QAAAG,QAAA,kBACA,yBAAAC,iBAAAC,KACAD,SAAA,aAAAJ,eACA;QACA,IAAAM,IAAAN,QAAA,mBAAAC,UAAAE,QAAA,aAAAJ,KAAA;QACA,SAAAQ,KAAAD,IAAA,mBAAAL,oBAAAF,MAAAQ,KAAAD,EAAAC;;EAECC,MAAA,SAAAC;;IACD,OCAgB,SAAUC;;;;;QCN1B,SAAAC,oBAAAC;;;;;YAGA,IAAAC,iBAAAD;YACA,OAAAC,iBAAAD,UAAAX;;;;;YAGA,IAAAC,SAAAW,iBAAAD;;gBACAX;;gBACAa,IAAAF;;gBACAG,SAAA;;;;;;;;;;;;;;YAUA,OANAL,QAAAE,UAAAI,KAAAd,OAAAD,SAAAC,eAAAD,SAAAU;YAGAT,OAAAa,UAAA,GAGAb,OAAAD;;;;;;QAvBA,IAAAY;;;;;;;;;;;;;;;;;;QAqCA,OATAF,oBAAAM,IAAAP,SAGAC,oBAAAO,IAAAL;QAGAF,oBAAAQ,IAAA,IAGAR,oBAAA;;;;;;IDmBM,SAAST,QAAQD,SAASU;QEzDhCA,gDAAA;QACA,IAAAS,QAAAT,iDAAA;QACAA,+CAAA;QAEA,IAAAU;YACAD;;QAGA,sBAAAE,WACAA,OAAAC,YAAAF,YAGAnB,OAAAD,UAAAoB;;;;;;IFmEM,SAASnB,QAAQD;QG/EvB,SAAAuB,UAAAC,SAAAC;YACA,KAAAD,WAAA,qBAAAA,SACA,OAAAC;YAGA,IAAAC;YACA,SAAAC,YAAAF,gBACAC,OAAAC,YAAAF,eAAAE;YAGA,KAAAA,YAAAH,SACAA,QAAAG,cACA,mBAAAD,OAAAC,YACAD,OAAAC,YAAAJ,UAAAG,OAAAC,WAAAH,QAAAG,aAEAD,OAAAC,YAAAH,QAAAG;YAIA,OAAAD;;QAGA,SAAAE,UAAAC,MAAAC;YACA,yBAAAC,OAAA;YAEAF,KAAAG,SAAAF,WACAD,KAAAI,YAAAF,OAAAG,OAAAJ,UAAAG;gBACAE;oBACAC,OAAAP;oBACAQ,aAAA;oBACAC,WAAA;oBACAC,eAAA;;qBAGA;;gBAEAV,KAAAG,SAAAF;gBACA,IAAAU,WAAA;gBACAA,SAAAP,YAAAH,UAAAG,WACAJ,KAAAI,YAAA,IAAAO,YACAX,KAAAI,UAAAE,cAAAN;;;;;QAMA5B,OAAAD;YACAyC,UAAAlB;YACAmB,UAAAd;;;;;;;IH0FM,SAAS3B,QAAQD,SAASU;QItIhC,SAAAiC,OAAAC,OAAApB,SAAAqB;YACAtC,KAAAqC,eACArC,KAAAuC,QAAAvC,KAAAqC,MAAAG,MAAAC,OACAzC,KAAAsC,iBACAtC,KAAA0C;YACA1C,KAAA2C,aAAA1B,QAAA0B,YACA3C,KAAA4C,YAAA3B,QAAA2B,aAAA;YAEA5C,KAAA6C,iBAAA5B,QAAA6B,QAAA7B,QAAA,iBAAAA,QAAA,iBAAA8B;YAEA/C,KAAAgD,OAAAhD,KAAAqC,MAAAG,MAAAQ,KAAA,MAAA/B,QAAA+B;YAEA/B,QAAAgC,QAAAjD,KAAAgD,KAAAE,KAAA5C,KAAAW,QAAAgC,MAAA,MACAjD,KAAAgD,KAAAE,KAAAC,aAAA,SAAAnD,KAAAoD,QAAA;YAEApD,KAAAgD,KAAAK;gBACAC,eAAA;gBACAC,GAAAvD,KAAAoD,QAAA;gBACAI,MAAAxD,KAAAoD,QAAA;gBACAK,aAAAzD,KAAAoD,QAAA;;YAGA,IAAAM,OAAA1D,KAAAoD,QAAA,SACAO,QAAA3D,KAAAoD,QAAA,gBACAQ,QAAA5D,KAAAoD,QAAA;YAEAM,QAAA1D,KAAAgD,KAAAK;gBAAAK;gBACAC,SAAA3D,KAAAgD,KAAAK;gBAAAQ,eAAAF;gBACAC,SAAA5D,KAAAgD,KAAAK;gBAAAS,eAAAF;gBAEA3C,QAAA8C,QAAA/D,KAAAgD,KAAAK,KAAA,QAAApC,QAAA8C,OACA9C,QAAA+C,UAAAhE,KAAAgD,KAAAK,KAAA,UAAApC,QAAA+C;YAEA,IAAAC,WAAAjE,KAAAoD,QAAA;YACA,IAAAa,UAAA;gBAIA,SAFAC,QAAAjD,QAAA+B,KAAAmB,MAAA,MACAC,WAAA,IACArE,IAAA,GAAAsE,KAAAH,MAAAI,QAAAD,KAAAtE,QAAA;oBACA,IAAAwE,OAAAL,MAAAnE;oBACAC,KAAAgD,KAAAK,KAAA,QAAAe,WAAA,MAAAG,OAEAH,YADApE,KAAAgD,KAAAwB,UAAAC,QAAAR,WACA,OAAAM,OAEA,MAAAA;;gBAGAvE,KAAAgD,KAAAK,KAAA,QAAAe,SAAAM,UAAA;;YAKA,IAFA1E,KAAAuC,MAAAoC,KAAA3E,KAAAgD,OAEAV,QAAA;gBACA,IAAAsC,YAAA5E,KAAAoD,QAAA;gBAEAd,OAAAe;oBACAG,MAAAxD,KAAAoD,QAAA;oBACAyB,QAAA7E,KAAAoD,QAAA;oBACA0B,gBAAA9E,KAAAoD,QAAA;oBACAqB,OAAAzE,KAAAgD,KAAAwB,UAAAC,QAAA,IAAAG;oBACAG,QAAA/E,KAAAgD,KAAAwB,UAAAO,SAAA,IAAAH;oBAGAtC,OAAAY,KAAAC,aAAA,SAAAnD,KAAAoD,QAAA,WAEAnC,QAAA8C,QAAAzB,OAAAe,KAAA,QAAApC,QAAA8C;gBACA9C,QAAA+C,UAAA1B,OAAAe,KAAA,UAAApC,QAAA+C,SACA/C,QAAAgC,QAAAX,OAAAY,KAAA5C,KAAAW,QAAAgC;gBAEAjD,KAAAuC,MAAAoC,KAAArC,SACAA,OAAA0C,aAAAhF,KAAAgD,OAEAhD,KAAAgD,KAAAK;oBACA4B,GAAA3C,OAAAkC,UAAAO,SAAA;oBAGA/E,KAAAkF;;;QAhFA,IAAAC,UAAAhF,iDAAA,IACAiF,WAAAD,QAAAC,UACAC,wBAAAF,QAAAE;;QAoFAjD,OAAAV,UAAA0B,UAAA,SAAAkC;YACA,IAAAtF,KAAAqC,OAAA;gBAGA,IAEAkD,MAFAC,OAAAxF,KAAAqC,MAAA,UAAArC,KAAAqC,MAAApB,QAAAqE,WAAAvC,QACA0C,OAAAzF,KAAAqC,MAAApB,QAAA,UAAAjB,KAAAqC,MAAApB,QAAAyE,QAAA1F,KAAA2C,YAAA2C,WAAAvC;gBAKA,OAHA/C,KAAAqC,MAAApB,QAAA2B,aAAA5C,KAAAqC,MAAApB,QAAA2B,UAAA5C,KAAA4C,eACA2C,OAAAvF,KAAAqC,MAAApB,QAAA2B,UAAA5C,KAAA4C,WAAA0C;gBAEAC,QAAAE,QAAAD;;WAGApD,OAAAV,UAAAwD,aAAA;YACAlF,KAAAuC,MAAAoD,UAAA,MAAA3F,KAAAoD,QAAA,sBAAApD,KAAAoD,QAAA;YAEApD,KAAAyE,QAAAzE,KAAAuC,MAAAiC,UAAAC,OACAzE,KAAA+E,SAAA/E,KAAAuC,MAAAiC,UAAAO;WAGA3C,OAAAV,UAAAkE,YAAA;YACA;gBAAArC,GAAAvD,KAAA6F,SAAA7F,KAAAyE,QAAA;gBACAQ,GAAAjF,KAAA8F,SAAA9F,KAAA+E,SAAA;;WAGA3C,OAAAV,UAAAmE,OAAA;YACA,OAAA7F,KAAAuC,MAAAiC,UAAAjB;WAGAnB,OAAAV,UAAAoE,OAAA;YACA,OAAA9F,KAAAuC,MAAAiC,UAAAS;WAGA7C,OAAAV,UAAAqE,SAAA,SAAAxC;YACAvD,KAAAuC,MAAAoD,UAAA,OAAA3F,KAAA6F,SAAAtC,KAAA,MAAAvD,KAAA8F;WAGA1D,OAAAV,UAAAsE,OAAA,SAAAzC;YACAvD,KAAAuC,MAAAoD,UAAA,MAAApC,IAAA,MAAAvD,KAAA8F;WAGA1D,OAAAV,UAAAuE,SAAA,SAAAhB;YACAjF,KAAAuC,MAAAoD,UAAA,MAAA3F,KAAA6F,SAAA,OAAA7F,KAAA8F,SAAAb;WAGA7C,OAAAV,UAAAwE,OAAA,SAAAjB;YACAjF,KAAAuC,MAAAoD,UAAA,MAAA3F,KAAA6F,SAAA,MAAAZ;WAGA7C,OAAAV,UAAAyE,SAAA;YACA,IAAAlB,IAAAjF,KAAA8F,QACAvC,IAAAvD,KAAA6F,SAAA7F,KAAAyE,QAAA;YACA;gBAAAlB;gBAAA0B;;WAGA7C,OAAAV,UAAA0E,YAAA;YACA,IAAAnB,IAAAjF,KAAA8F,SAAA9F,KAAA+E,QACAxB,IAAAvD,KAAA6F,SAAA7F,KAAAyE,QAAA;YACA;gBAAAlB;gBAAA0B;;WAGA7C,OAAAV,UAAA2E,UAAA;YACA,IAAApB,IAAAjF,KAAA8F,SAAA9F,KAAAuC,MAAAiC,UAAAO,SAAA,GACAxB,IAAAvD,KAAA6F;YACA;gBAAAtC;gBAAA0B;;WAGA7C,OAAAV,UAAA4E,WAAA;YACA,IAAArB,IAAAjF,KAAA8F,SAAA9F,KAAAuC,MAAAiC,UAAAO,SAAA,GACAxB,IAAAvD,KAAA6F,SAAA7F,KAAAuC,MAAAiC,UAAAC;YACA;gBAAAlB;gBAAA0B;;WAGA7C,OAAAV,UAAA6E,SAAA;YACA,IAAAvG,KAAA8C,MAAA;gBAEA,IAAA0D,aAAAxG,KAAAoD,QAAA;gBAEA,gBAAApD,KAAA6C,gBAAA;oBAEA,IAAA4D,aAAAzG,KAAAsG;oBAEA,KAAAtG,KAAA8C,KAAA4D,cAAA;wBAEA1G,KAAA8C,KAAAoD,KAAAO,WAAAxB,IAAAjF,KAAA8C,KAAAiC,SAAA,IACA/E,KAAA8C,KAAAiD,OAAA/F,KAAAuC,MAAAiC,UAAAjB,IAAAvD,KAAAyE,QAAA+B;wBAEA,IAAAG,OAAA3G;yBACA,SAAA4G;4BAGA,SADAC,MADAC,kBAAA,GAEA/G,IAAA,GAAAgH,MAAAJ,KAAAtE,MAAAqD,QAAApB,QAAAyC,MAAAhH,QAAA;gCACA8G,OAAAF,KAAAtE,MAAAqD,QAAA3F;gCAEA,IAAAiH,OAAAC,KAAAC,IAAAL,KAAAjB,YAAArC,IAAAoD,KAAA7D,KAAA8C,YAAArC;gCACA,IAAAsD,KAAAjB,YAAAX,IAAA0B,KAAA7D,KAAA8C,YAAAX,KAAA+B,QAAAL,KAAA7D,KAAA2B,QAAA;oCACAqC,kBAAA;oCACA;;;4BAIAA,mBACAH,KAAA7D,KAAAkD,KAAAa,KAAAhB,SAAAgB,KAAApC,QAAA+B,aACAI;6BAIA5G,KAAA8C,KAAA4D,gBAAA,GAEA1G,KAAA8C,KAAAyD;;uBAEA;oBACA,IAAAY,cAAAnH,KAAAoG;oBAEApG,KAAA8C,KAAA4D,iBACA1G,KAAA8C,KAAAmD,OAAAjG,KAAA8F,SAAA9F,KAAA+E,SAAAyB;oBACAxG,KAAA8C,KAAAkD,KAAAmB,YAAA5D,IAAAvD,KAAA8C,KAAA2B,QAAA,IACAzE,KAAA8C,KAAA4D,gBAAA;oBAEA1G,KAAA8C,KAAAyD;;;WAMAnE,OAAAV,UAAA0F,cAAA;YACApH,KAAA8C,SACA9C,KAAA6C,iBACA7C,KAAAqH,WAAArH,KAAA8C,MAAA,IAAA9C,KAAA6C,kBAEA7C,KAAAqH,WAAArH,KAAA8C;WAKAV,OAAAV,UAAA2F,aAAA,SAAA/E,QAAAU,MAAAsE;YACAtH,KAAA0C,YAAA6E,QAAAjF,UAAA,KACAtC,KAAA0C,YAAAiC,KAAArC;YAGA,IAoBAkF,MApBAjE,IAAAvD,KAAA4F,YAAArC,GACA0B,IAAAjF,KAAA4F,YAAAX,GACAwC,QAAAzH,KAAAsG,YACAoB,SAAA1H,KAAAoG,aACAuB,OAAA3H,KAAAqG,WAEAuB,UAAAtF,OAAAsD,YAAArC,GACAsE,UAAAvF,OAAAsD,YAAAX,GACA6C,YAAAxF,OAAA6D,UACA4B,cAAAzF,OAAAgE,YACA0B,aAAA1F,OAAA+D,WAEA4B,iBAAA1E,MAAAqE,SACAM,eAAAjD,MAAA4C,SACAM,UAAAN,UAAA5C,GACAmD,UAAAnD,IAAA4C,WAAA7H,SAAAsC,QACA+F,SAAA9E,IAAAqE,SACAU,UAAAV,UAAArE,GAEAgF,OAAA,GAEA/B,aAAAxG,KAAAoD,QAAA,gBACAoF,WAAAxI,KAAAoD,QAAA;YAEA,IAAAkE,UAAA,aAAAA,WAAAW,mBAAAE,SAKA,IAAAb,UAAA,YAAAA,WAAAY,iBAAAI,SAKA,IAAAhB,UAAA,WAAAA,WAAAY,iBAAAG,QAKA,IAAAf,UAAA,YAAAA,WAAAW,mBAAAG,SAUA,IAAAd,UAAA,YAAAA,WAAAW,mBAAAE,SAUA,IAAAb,UAAA,aAAAA,WAAAe,QAmBA,IAAAf,UAAA,aAAAA,WAAAgB,SAWA,IAAAhB,UAAA,YAAAA,UAAAe,QACAb,OAAApC,SAAApF,KAAAqC,OAAAoF;gBACAlE,GAAAkE,MAAAlE,IAAAiD,aAAA;gBAAAvB,GAAAwC,MAAAxC;;gBACA1B,GAAAkE,MAAAlE,IAAAiD,aAAA;gBAAAvB,GAAA6C,UAAA7C,IAAAuB,aAAA;;gBACAjD,GAAAuE,UAAAvE;gBAAA0B,GAAA6C,UAAA7C,IAAAuB,aAAA;;gBACAjD,GAAAuE,UAAAvE;gBAAA0B,GAAA6C,UAAA7C;iBACAjC,OACAhD,KAAAyI,cAAA,GACAnG,OAAAoG,UAAA,GACAH,OAAAd,MAAAlE,IAAAiD,aAAA,QACA,IAAAc,UAAA,YAAAA,UAAAgB,SACAd,OAAApC,SAAApF,KAAAqC,OAAAoF;gBACAlE,GAAAuE,UAAAvE;gBAAA0B,GAAAwC,MAAAxC;;gBACA1B,GAAAuE,UAAAvE;gBAAA0B,GAAA6C,UAAA7C;iBACAjC,OACAhD,KAAAyI,cAAA,GACAnG,OAAAoG,UAAA,GACAH,OAAAd,MAAAlE,IAAAiD,aAAA,QACA,IAAAc,UAAA,aAAAA,UAAAW,kBAAAG,SACAZ,OAAApC,SAAApF,KAAAqC,OAAAqF;gBACAnE,GAAAmE,OAAAnE;gBAAA0B,GAAAyC,OAAAzC,IAAAuB,aAAA;;gBACAjD,GAAAkE,MAAAlE,IAAAiD,aAAA;gBAAAvB,GAAAyC,OAAAzC,IAAAuB,aAAA;;gBACAjD,GAAAkE,MAAAlE,IAAAiD,aAAA;gBAAAvB,GAAA6C,UAAA7C,IAAAuB,aAAA;;gBACAjD,GAAAuE,UAAAvE;gBAAA0B,GAAA6C,UAAA7C,IAAAuB,aAAA;;gBACAjD,GAAAuE,UAAAvE;gBAAA0B,GAAA6C,UAAA7C;iBACAjC,OACAhD,KAAA2I,eAAA,GACArG,OAAAoG,UAAA,GACAH,OAAAb,OAAAnE,IAAAiD,aAAA,QACA,eAAAc,UAAAW,kBAAAG,SAAA;gBACA,IAAAQ,QAAAjB,KAAApE,IAAAiD,aAAA;gBACAwB,WAAAzE,IAAAoE,KAAApE,MACAqF,QAAAZ,WAAAzE,IAAAiD,aAAA,IAEAgB,OAAApC,SAAApF,KAAAqC,OAAAsF;oBACApE,GAAAqF;oBAAA3D,GAAA0C,KAAA1C;;oBACA1B,GAAAqF;oBAAA3D,GAAA6C,UAAA7C,IAAAuB,aAAA;;oBACAjD,GAAAuE,UAAAvE;oBAAA0B,GAAA6C,UAAA7C,IAAAuB,aAAA;;oBACAjD,GAAAuE,UAAAvE;oBAAA0B,GAAA6C,UAAA7C;qBACAjC,OACAhD,KAAA6I,aAAA,GACAvG,OAAAoG,UAAA,GACAH,OAAAZ,KAAApE;mBACA,WAAA+D,WACAE,OAAApC,SAAApF,KAAAqC,OAAAsF;gBACApE,GAAAuE,UAAAvE,KAAAoE,KAAApE,IAAAuE,UAAAvE,KAAA;gBAAA0B,GAAA0C,KAAA1C;;gBACA1B,GAAAuE,UAAAvE,KAAAoE,KAAApE,IAAAuE,UAAAvE,KAAA;gBAAA0B,GAAA6C,UAAA7C,IAAAuB,aAAA;;gBACAjD,GAAAuE,UAAAvE;gBAAA0B,GAAA6C,UAAA7C,IAAAuB,aAAA;;gBACAjD,GAAAuE,UAAAvE;gBAAA0B,GAAA6C,UAAA7C;iBACAjC,OACAhD,KAAA6I,aAAA,GACAvG,OAAAoG,UAAA,GACAH,OAAAZ,KAAApE,SA9DAiE,OAAApC,SAAApF,KAAAqC,OAAAqF;gBACAnE,GAAAmE,OAAAnE;gBAAA0B,GAAAyC,OAAAzC,IAAAuB,aAAA;;gBACAjD,GAAAmE,OAAAnE,KAAAmE,OAAAnE,IAAAuE,UAAAvE,KAAA;gBAAA0B,GAAAyC,OAAAzC,IAAAuB,aAAA;;gBACAjD,GAAAmE,OAAAnE,KAAAmE,OAAAnE,IAAAuE,UAAAvE,KAAA;gBAAA0B,GAAA6C,UAAA7C,IAAAuB,aAAA;;gBACAjD,GAAAuE,UAAAvE;gBAAA0B,GAAA6C,UAAA7C,IAAAuB,aAAA;;gBACAjD,GAAAuE,UAAAvE;gBAAA0B,GAAA6C,UAAA7C;iBACAjC,OACAhD,KAAA2I,eAAA,GACArG,OAAAoG,UAAA,GACAH,OAAAb,OAAAnE,KAAAmE,OAAAnE,IAAAuE,UAAAvE,KAAA,QA3BAiE,OADAxH,KAAA8I,WAAAV,UACAhD,SAAApF,KAAAqC,OAAAqF;gBACAnE,GAAAmE,OAAAnE;gBAAA0B,GAAAyC,OAAAzC,IAAAuB,aAAA;;gBACAjD,GAAAmE,OAAAnE,KAAAmE,OAAAnE,IAAAuE,UAAAvE,KAAA;gBAAA0B,GAAAyC,OAAAzC,IAAAuB,aAAA;;gBACAjD,GAAAmE,OAAAnE,KAAAmE,OAAAnE,IAAAuE,UAAAvE,KAAA;gBAAA0B,GAAA6C,UAAA7C,IAAAuB,aAAA;;gBACAjD,GAAAuE,UAAAvE;gBAAA0B,GAAA6C,UAAA7C,IAAAuB,aAAA;;gBACAjD,GAAAuE,UAAAvE;gBAAA0B,GAAA6C,UAAA7C;iBACAjC,QAEAoC,SAAApF,KAAAqC,OAAAqF;gBACAnE,GAAAmE,OAAAnE;gBAAA0B,GAAA6C,UAAA7C,IAAAuB,aAAA;;gBACAjD,GAAAuE,UAAAvE;gBAAA0B,GAAA6C,UAAA7C,IAAAuB,aAAA;;gBACAjD,GAAAuE,UAAAvE;gBAAA0B,GAAA6C,UAAA7C;iBACAjC,OAEAhD,KAAA2I,eAAA,GACArG,OAAAoG,UAAA,GACAH,OAAAb,OAAAnE,KAAAmE,OAAAnE,IAAAuE,UAAAvE,KAAA,QA3BAiE,OAAApC,SAAApF,KAAAqC,OAAAoF;gBACAlE,GAAAkE,MAAAlE,IAAAiD,aAAA;gBAAAvB,GAAAwC,MAAAxC;;gBACA1B,GAAAkE,MAAAlE,IAAAiD,aAAA;gBAAAvB,GAAA6C,UAAA7C,IAAAuB,aAAA;;gBACAjD,GAAAuE,UAAAvE;gBAAA0B,GAAA6C,UAAA7C,IAAAuB,aAAA;;gBACAjD,GAAAuE,UAAAvE;gBAAA0B,GAAA6C,UAAA7C;iBACAjC,OACAhD,KAAAyI,cAAA,GACAnG,OAAAoG,UAAA,GACAH,OAAAd,MAAAlE,IAAAiD,aAAA,QAlBAgB,OAAApC,SAAApF,KAAAqC,OAAAoF;gBACAlE,GAAAkE,MAAAlE,IAAAiD,aAAA;gBAAAvB,GAAAwC,MAAAxC;;gBACA1B,GAAAkE,MAAAlE,IAAAiD,aAAA;gBAAAvB,GAAA6C,UAAA7C,IAAAuB,aAAA;;gBACAjD,GAAAuE,UAAAvE;gBAAA0B,GAAA6C,UAAA7C,IAAAuB,aAAA;;gBACAjD,GAAAuE,UAAAvE;gBAAA0B,GAAA6C,UAAA7C;iBACAjC,OACAhD,KAAAyI,cAAA,GACAnG,OAAAoG,UAAA,GACAH,OAAAd,MAAAlE,IAAAiD,aAAA,QAbAgB,OAAApC,SAAApF,KAAAqC,OAAAsF,MAAAI,aAAA/E;YACAhD,KAAA6I,aAAA,GACAvG,OAAAyG,YAAA,GACAR,OAAAR,YAAAxE,QARAiE,OAAApC,SAAApF,KAAAqC,OAAAoF,OAAAO,YAAAhF;YACAhD,KAAAyI,cAAA,GACAnG,OAAAwG,WAAA,GACAP,OAAAP,WAAAzE,QARAiE,OAAApC,SAAApF,KAAAqC,OAAAqF,QAAAI,WAAA9E;YACAhD,KAAA2I,eAAA,GACArG,OAAAoG,UAAA,GACAH,OAAAb,OAAAnE;YAoHA,IAAAiE,MAAA;gBACA,SAAAwB,IAAA,GAAAC,OAAAjJ,KAAAqC,MAAA6G,MAAA5E,QAAA2E,OAAAD,QAOA,SALAjC,KADAoC,YAAAnJ,KAAAqC,MAAA6G,MAAAF,IAGAI,QAAAD,UAAA9F,KAAA,SACAgG,QAAA7B,KAAAnE,KAAA,SAEAiG,KAAA,GAAAC,OAAAH,MAAA9E,SAAA,GAAAiF,OAAAD,UAAA;oBACA,IAAAE;oBACAA,QAAA7E,OAAA,KAAAyE,MAAAE,IAAA,IAAAF,MAAAE,IAAA,OACAE,QAAA7E,OAAA,KAAAyE,MAAAE,KAAA,OAAAF,MAAAE,KAAA;oBAOA,SALAG,eAAAD,QAAA,OACAE,eAAAF,QAAA,OACAG,aAAAH,QAAA,OACAI,aAAAJ,QAAA,OAEAK,KAAA,GAAAC,QAAAT,MAAA/E,SAAA,GAAAwF,QAAAD,UAAA;wBACA,IAAAE;wBACAA,YAAApF,OAAA,KAAA0E,MAAAQ,IAAA,IAAAR,MAAAQ,IAAA,OACAE,YAAApF,OAAA,KAAA0E,MAAAQ,KAAA,OAAAR,MAAAQ,KAAA;wBAEA,IAAAG,eAAAD,YAAA,OACAE,eAAAF,YAAA,OACAG,aAAAH,YAAA,OACAI,aAAAJ,YAAA,OAEAK,MAAA/E,sBAAAoE,cAAAC,cAAAC,YAAAC,YAAAI,cAAAC,cAAAC,YAAAC;wBACA,IAAAC,IAAAC,WAAAD,IAAAE,SAAA;4BAEA,IAAAC;4BACAN,iBAAAE,aACAH,eAAAE,cACAK,eAAA,KAAAH,IAAA7G,IAAA,IAAAiF,UAAAyB;4BACAZ,MAAAmB,OAAAX,KAAA,MAAAU,aACAA,eAAA,KAAAH,IAAA7G,IAAA,IAAAiF,UAAAyB,cAAAG,IAAA7G,GAAA0G,eAAA,IAAAzB,UAAA4B,IAAA7G,IAAA,IAAAiF,UAAAyB;4BACAZ,MAAAmB,OAAAX,KAAA,MAAAU,aACA/C,KAAAnE,KAAA,QAAAgG,WAEAkB,eAAA,KAAAH,IAAA7G,IAAA,IAAAiF,UAAAyB;4BACAZ,MAAAmB,OAAAX,KAAA,MAAAU,aACAA,eAAA,KAAAH,IAAA7G,IAAA,IAAAiF,UAAAyB,cAAAG,IAAA7G,GAAA0G,eAAA,IAAAzB,UAAA4B,IAAA7G,IAAA,IAAAiF,UAAAyB;4BACAZ,MAAAmB,OAAAX,KAAA,MAAAU,aACA/C,KAAAnE,KAAA,QAAAgG,UAGAY,eAAAE,cACAI,eAAA,KAAAP,cAAAI,IAAAnF,IAAA,IAAAuD;4BACAa,MAAAmB,OAAAX,KAAA,MAAAU,aACAA,eAAA,KAAAP,cAAAI,IAAAnF,IAAA,IAAAuD,UAAAwB,eAAA,IAAAxB,UAAA4B,IAAAnF,GAAA+E,cAAAI,IAAAnF,IAAA,IAAAuD;4BACAa,MAAAmB,OAAAX,KAAA,MAAAU,aACA/C,KAAAnE,KAAA,QAAAgG,WAEAkB,eAAA,KAAAP,cAAAI,IAAAnF,IAAA,IAAAuD;4BACAa,MAAAmB,OAAAX,KAAA,MAAAU,aACAA,eAAA,KAAAP,cAAAI,IAAAnF,IAAA,IAAAuD,UAAAwB,eAAA,IAAAxB,UAAA4B,IAAAnF,GAAA+E,cAAAI,IAAAnF,IAAA,IAAAuD;4BACAa,MAAAmB,OAAAX,KAAA,MAAAU,aACA/C,KAAAnE,KAAA,QAAAgG,SAIAQ,MAAA,GACA9C,OAAA;;;;gBAMA/G,KAAAqC,MAAA6G,MAAAvE,KAAA6C;;cAGAxH,KAAAqC,MAAAoI,gBAAAzK,KAAAqC,MAAAoI,gBAAAlC,OAAAvI,KAAAqC,MAAAoI,kBACAzK,KAAAqC,MAAAoI,eAAAlC;WAIA7I,OAAAD,UAAA2C;;;;;;IJoJM,SAAS1C,QAAQD;QKnlBvB,SAAAiL,SAAArI,OAAAsI,UAAAC;YACA,IAAA7K,GAAAgH,KACA8D,OAAA;YACA,KAAA9K,IAAA,GAAAgH,MAAA,IAAA6D,OAAAtG,SAAA,GAAAyC,MAAAhH,QAAA,GACA8K,QAAA,QAAA9K,IAAA,SAAAA,IAAA;YAEA,IAAA+K,eAAAH,SAAApH,GAAAoH,SAAA1F;YACA,KAAAlF,IAAA,GAAAgH,MAAA6D,OAAAtG,QAAAyC,MAAAhH,QACA+K,WAAAnG,KAAAiG,OAAA7K,GAAAwD,IACAuH,WAAAnG,KAAAiG,OAAA7K,GAAAkF;YAEA,IAAA3C,SAAAD,MAAAG,MAAAqI,WAAAC;YACAxI,OAAAe,KAAA,UAAAhB,MAAApB,QAAA,mBACAqB,OAAAe,KAAA,gBAAAhB,MAAApB,QAAA;YAEA,IAAAyC,OAAArB,MAAApB,QAAAyC,MACAC,QAAAtB,MAAApB,QAAA,gBACA2C,QAAAvB,MAAApB,QAAA;YAMA,OAJAyC,QAAApB,OAAAe;gBAAAK;gBACAC,SAAArB,OAAAe;gBAAAQ,eAAAF;gBACAC,SAAAtB,OAAAe;gBAAAS,eAAAF;gBAEAtB;;QAGA,SAAA8C,SAAA/C,OAAA0I,MAAAC,IAAAhI;YACA,IAAAjD,GAAAgH;YAEA,qBAAAvF,OAAAE,UAAAuJ,SAAAzK,KAAAwK,QACAA;YAGA,IAAAH,OAAA;YACA,KAAA9K,IAAA,GAAAgH,MAAA,IAAAiE,GAAA1G,SAAA,GAAAyC,MAAAhH,QAAA,GACA8K,QAAA,QAAA9K,IAAA,SAAAA,IAAA;YAEA,IAAA+K,eAAAC,KAAAxH,GAAAwH,KAAA9F;YACA,KAAAlF,IAAA,GAAAgH,MAAAiE,GAAA1G,QAAAyC,MAAAhH,QACA+K,WAAAnG,KAAAqG,GAAAjL,GAAAwD,IACAuH,WAAAnG,KAAAqG,GAAAjL,GAAAkF;YAGA,IAAAuC,OAAAnF,MAAAG,MAAAqI,WAAAC;YACAtD,KAAAnE;gBACAwB,QAAAxC,MAAApB,QAAA;gBACA6D,gBAAAzC,MAAApB,QAAA;gBACAiK,aAAA7I,MAAApB,QAAA;;YAGA,IAAAyC,OAAArB,MAAApB,QAAAyC,MACAC,QAAAtB,MAAApB,QAAA,gBACA2C,QAAAvB,MAAApB,QAAA;YAMA,IAJAyC,QAAA8D,KAAAnE;gBAAAK;gBACAC,SAAA6D,KAAAnE;gBAAAQ,eAAAF;gBACAC,SAAA4D,KAAAnE;gBAAAS,eAAAF;gBAEAZ,MAAA;gBAEA,IAAAmI,cAAA,GAEAC,WAAA/I,MAAAG,MAAAQ,KAAA,MAAAA,OAEAqI,gBAAA,GACAC,UAAAN,GAAA;gBAEAD,KAAA9F,MAAAqG,QAAArG,MACAoG,gBAAA;gBAGA,IAAA9H,IAAA,GACA0B,IAAA;gBAEAkG,cAEA5H,IADAwH,KAAAxH,IAAA+H,QAAA/H,IACAwH,KAAAxH,KAAAwH,KAAAxH,IAAA+H,QAAA/H,KAAA,IAEA+H,QAAA/H,KAAA+H,QAAA/H,IAAAwH,KAAAxH,KAAA;gBAIA0B,IADA8F,KAAA9F,IAAAqG,QAAArG,IACA8F,KAAA9F,KAAA8F,KAAA9F,IAAAqG,QAAArG,KAAA,IAEAqG,QAAArG,KAAAqG,QAAArG,IAAA8F,KAAA9F,KAAA;gBAGAoG,gBACA9H,KAAA6H,SAAA5G,UAAAC,QAAA,GACAQ,KAAA5C,MAAApB,QAAA,mBAEAsC,KAAAlB,MAAApB,QAAA;gBACAgE,KAAAmG,SAAA5G,UAAAO,SAAA,OAGAxB,IAAAwH,KAAAxH,GACA0B,IAAA8F,KAAA9F,GAEAoG,gBACA9H,KAAAlB,MAAApB,QAAA;gBACAgE,KAAA5C,MAAApB,QAAA,mBAEAsC,KAAAlB,MAAApB,QAAA,oBACAgE,KAAA5C,MAAApB,QAAA;gBAIAmK,SAAA/H;oBACAC,eAAA;oBACAG,aAAApB,MAAApB,QAAA;oBACAuC,MAAAnB,MAAApB,QAAA;oBACAsC;oBACA0B;oBAGAvB,QAAA0H,SAAA/H;oBAAAK;oBACAC,SAAAyH,SAAA/H;oBAAAQ,eAAAF;oBACAC,SAAAwH,SAAA/H;oBAAAS,eAAAF;;;YAGA,OAAA4D;;QAGA,SAAAnC,sBAAAkG,aAAAC,aAAAC,WAAAC,WAAAC,aAAAC,aAAAC,WAAAC;;YAEA,IAAAC,aAAAjM,GAAAkM,GAAAC,YAAAC,YAAAC;gBACA5I,GAAA;gBACA0B,GAAA;gBACAoF,UAAA;gBACAC,UAAA;;;;;;;;;;YAGA,OADAyB,eAAAD,YAAAF,gBAAAH,YAAAF,gBAAAM,YAAAF,gBAAAD,YAAAF;YACA,MAAAO,cACAI,UAEArM,IAAA0L,cAAAI,aACAI,IAAAT,cAAAI;YACAM,cAAAJ,YAAAF,eAAA7L,KAAAgM,YAAAF,eAAAI,GACAE,cAAAT,YAAAF,eAAAzL,KAAA4L,YAAAF,eAAAQ;YACAlM,IAAAmM,aAAAF,aACAC,IAAAE,aAAAH,aAGAI,OAAA5I,IAAAgI,cAAAzL,KAAA2L,YAAAF;YACAY,OAAAlH,IAAAuG,cAAA1L,KAAA4L,YAAAF,cAOA1L,IAAA,SAAAA,MACAqM,OAAA9B,WAAA;YAGA2B,IAAA,SAAAA,MACAG,OAAA7B,WAAA,IAGA6B;;QAGAzM,OAAAD;YACAiL;YACAtF;YACAC;;;;;;;IL8lBM,SAAS3F,QAAQD,SAASU;QM3vBhC,SAAAS,MAAAwL;YAsHA,SAAAC,UAAAC;gBACA,IAAAC,aAAAD,EAAA/E,QAAA,UACAiF,WAAAF,EAAA/E,QAAA;gBACA,OAAAgF,cAAA,KAAAC,YAAA,IACAnK,MAAAqD,QAAA4G,EAAA5H,UAAA,GAAA6H,aAAA,MAEAlK,MAAAqD,QAAA4G;;YAGA,SAAAG,YAAAH;gBACA,IAAAxJ,OAAA,QACAyJ,aAAAD,EAAA/E,QAAA,UACAiF,WAAAF,EAAA/E,QAAA;gBASA,OARAgF,cAAA,KAAAC,YAAA,MACA1J,OAAA4J,SAAAhI,UAAA6H,YAAAC;gBACA1J,KAAAyE,QAAA,YACA,UAAAzE,QAAA,SAAAA,SACAA,OAAA,WAAAA;gBAIAA;;YA1IAsJ,iBAAA,IACAA,cAAAO;YA4FA,SA1FAtK;gBACAqD;gBACAkH,OAAA;gBACAC,SAAA,SAAAC,WAAA7L;oBAWA,SAAA8L,iBAAAT;wBACA,IAAAU,YAAAV,EAAArJ,MACA,OAAA+J,YAAAV,EAAArJ;wBAGA,QAAAqJ,EAAA3J;0BACA;4BACAqK,YAAAV,EAAArJ,OAAA,IAAAgK,MAAAC,SAAAZ;4BACA;;0BACA;4BACAU,YAAAV,EAAArJ,OAAA,IAAAkK,IAAAD,SAAAZ;4BACA;;0BACA;4BACAU,YAAAV,EAAArJ,OAAA,IAAAmK,UAAAF,SAAAZ;4BACA;;0BACA;4BACAU,YAAAV,EAAArJ,OAAA,IAAAoK,YAAAH,SAAAZ;4BACA;;0BACA;4BACAU,YAAAV,EAAArJ,OAAA,IAAAqK,WAAAJ,SAAAZ;4BACA;;0BACA;4BACAU,YAAAV,EAAArJ,OAAA,IAAAsK,UAAAL,SAAAZ;4BACA;;0BACA;4BACA,WAAAkB,MAAA;;wBAGA,OAAAR,YAAAV,EAAArJ;;oBAtCA,IAAA0D,OAAA3G;oBAEAA,KAAAkN,WACAlN,KAAAkN,QAAAO;oBAGA,IAAAP,UAAA,IAAArM,UAAAiM,WAAA7L;oBACAjB,KAAAkN;oBACA,IAAAF;qBAiCA,SAAAU,eAAApB,GAAAqB,UAAAC;wBACA,IAAAC,WAAAd,iBAAAT;wBAiBA,OAfA3F,KAAAiG,UAAAN,IACAY,QAAAY,UAAAD,YACAF,YAAAC,SAAAD,SAAAI,WACAJ,oBAAA,aACAC,KAAAI,QAAA1B,KACAqB,SAAAK,IAAAH;wBAEAD,KAAAK,OAAA3B,KACAqB,SAAAM,GAAAJ,aAGAF,SAAAO,KAAAL,YAIAA,SAAAE,SACAF,YAGAA,oBAAA,aACAvB,EAAA0B,OACAN,eAAApB,EAAA0B,KAAAH,UAAAvB;wBAEAA,EAAA2B,MACAP,eAAApB,EAAA2B,IAAAJ,UAAAvB,MAEAA,EAAAxJ,QACA4K,eAAApB,EAAAxJ,MAAA+K,UAAAvB;wBAGAuB;sBACA7N,KAAA4M,QAEAM,QAAA3G;;gBAEAkH,OAAA;oBACAzN,KAAAkN,QAAAO;;eAIAvE,YACAiF,YAAA,GACAC,KAAA,GAAAC,QAAAjC,MAAA9H,QAAA+J,QAAAD,UACA,aAAAhC,MAAAgC,OAAA,SAAAhC,MAAAgC,KAAA;gBACA,IAAAE,QAAAlC,MAAA1H,UAAAyJ,WAAAC;gBACAD,YAAAC,KAAA,GACAlF,MAAAvE,KAAA2J,MAAAC,QAAA;;YAIAJ,YAAA/B,MAAA9H,UACA4E,MAAAvE,KAAAyH,MAAAoC,OAAAL;YAGA,SAAAnF,IAAA,GAAAjC,MAAAmC,MAAA5E,QAAAyC,MAAAiC,KAAA;gBACA,IAAAyF,cAAAvF,MAAAF;gBAEAyF,YAAAlH,QAAA,aAAAkH,YAAAlH,QAAA,aACA2B,MAAAF,IAAA,aAAAyF;gBACAvF,MAAAsB,OAAAxB,GAAA,IACAjC,SAEAiC;;YA4BA,MAAAE,MAAA5E,SAAA;gBACA,IAAAkD,OAAA0B,MAAAsB,OAAA;gBAEA,IAAAhD,KAAAD,QAAA;;oBAEA,IAUAmH,KAVAC,QAAAnH,KAAArD,MAAA,OACA7B;wBACAW,KAAA0L,MAAA;wBACAhM,YAAAgM,MAAA;wBACA3L,MAAA;wBACAe,MAAA;wBACAC,QAAA;wBACApB,WAAA;;;oBA0BA,IArBAN,OAAAK,WAAA4E,QAAA,eACAmH,MAAApM,OAAAK,WAAAwB,MAAA;oBACA7B,OAAAK,aAAA+L,IAAA9H,SACAtE,OAAAU,OAAA0L,IAAAE,KAAA,QAGAtM,OAAAU,QAAAV,OAAAU,KAAAuE,QAAA,cACAmH,MAAApM,OAAAU,KAAAmB,MAAA;oBACA7B,OAAAU,OAAA0L,IAAA9H,SACAtE,OAAAyB,OAAA2K,IAAAE,KAAA,SACAtM,OAAAK,WAAA4E,QAAA,eACAmH,MAAApM,OAAAK,WAAAwB,MAAA;oBACA7B,OAAAK,aAAA+L,IAAA9H,SACAtE,OAAAyB,OAAA2K,IAAAE,KAAA,QAGAtM,OAAAK,WAAA4E,QAAA,eACAjF,OAAAK,aAAAL,OAAAK,WAAAwB,MAAA;oBAIA7B,OAAAyB,MAAA;wBACA,IAAAwI,aAAAjK,OAAAyB,KAAAwD,QAAA,UACAiF,WAAAlK,OAAAyB,KAAAwD,QAAA;wBACAgF,cAAA,KAAAC,YAAA,MACAlK,OAAA0B,SAAA1B,OAAAyB,KAAAW,UAAA6H,YAAAC;wBACAlK,OAAAyB,OAAAzB,OAAAyB,KAAAW,UAAA,GAAA6H,aAAA;;;;oBAMA,IAAAjK,OAAAU,QACAV,OAAAU,KAAAuE,QAAA;wBACA,IAAAsH,cAAAvM,OAAAU,KAAAmB,MAAA;wBACA7B,OAAAM,YAAAiM,YAAAC,MAAAnC,QACArK,OAAAU,OAAA6L,YAAAD,KAAA;;;oBAKAvM,MAAAqD,QAAApD,OAAAW,OAAAX;uBAEA,IAAAkF,KAAAD,QAAA,YAGA,SADAwH,cAAAvH,KAAArD,MAAA,OACApE,IAAA,GAAAiP,OAAAD,YAAAzK,QAAA0K,OAAAjP,QAAA;oBACA,IAAA2M,WAAAqC,YAAAhP,IAEAkP,WAAA5C,UAAAK,WACA5J,OAAA2J,YAAAC,WAEAwC,YAAA;oBACA,IAAApM,KAAAyE,QAAA;wBACA,IAAA4H,UAAArM,KAAAqB,MAAA;wBACArB,OAAAqM,QAAA,IACAD,YAAAC,QAAA,GAAAxC;;oBAOA,IAJAtK,MAAAuK,UACAvK,MAAAuK,QAAAqC,WAGAD,OAAAjP,IAAA;wBACA,IAAAqP,WAAAL,YAAAhP,IAAA;wBACAkP,SAAAnM,QAAAuJ,UAAA+C,WACAH,SAAA,eAAAnM,QAAAoM;wBACAA,YAAA;;;;YAMA,OAAA7M;;QAhPA,IAAAxB,YAAAV,6CAAA,IACA8M,QAAA9M,oDAAA,KACAgN,MAAAhN,kDAAA,IACAiN,YAAAjN,wDAAA,KACAkN,cAAAlN,0DAAA,KACAmN,aAAAnN,yDAAA,KACAoN,YAAApN,wDAAA;QA6OAT,OAAAD,UAAAmB;;;;;;IN6wBM,SAASlB,QAAQD,SAASU;QO3/BhC,SAAAoN,UAAAlL,OAAApB;YACAA,yBACAmB,OAAA5B,KAAAR,MAAAqC,OAAApB,UACAjB,KAAAqP,aAAArP,KAAAoD,QAAA;YACApD,KAAAsP,gBAAA,UACAtP,KAAAuP,eAAA,SACAtO,QAAA+M,OAAA/M,QAAAuO,iBAAAvO,QAAAgN,OAAAhN,QAAAwO,eACA,YAAAxO,QAAAuO,iBACAxP,KAAAuP,eAAA;YACAvP,KAAAsP,gBAAA,YAEAtP,KAAAuP,eAAA,SACAvP,KAAAsP,gBAAA,YAEArO,QAAA+M,QAAA/M,QAAAuO,iBAAAvO,QAAAgN,MAAAhN,QAAAwO,eACA,YAAAxO,QAAAwO,gBACAzP,KAAAsP,gBAAA;YACAtP,KAAAuP,eAAA,YAEAvP,KAAAsP,gBAAA,SACAtP,KAAAuP,eAAA,aAGAvP,KAAAsP,gBAAA;YACAtP,KAAAuP,eAAA,UAGAvP,KAAAsP,gBAAAtP,KAAAsP,iBAAA;YACAtP,KAAAuP,eAAAvP,KAAAuP,gBAAA,SAEAvP,KAAAgD,KAAAK;gBACAE,GAAA,IAAAvD,KAAAqP;;YAGA,IAAA5K,QAAAzE,KAAAgD,KAAAwB,UAAAC,QAAA,IAAAzE,KAAAqP;YACA5K,iBAAA;YACA,IAAAM,SAAA/E,KAAAgD,KAAAwB,UAAAO,SAAA,IAAA/E,KAAAqP;YACAtK,mBAAA,GACAA,SAAAkC,KAAAyI,IAAA,KAAAjL,OAAAM;YACA,IAAA4K,SAAAlL,QAAA,GACAmL,SAAA7K,SAAA;YAEA/E,KAAAgD,KAAAK;gBACAE,GAAAoM,SAAA3P,KAAAqP,aAAA;;YAGA,IAAAzC;gBAAArJ,GAAAoM;gBAAA1K,GAAA2K;eACAhF;gBACArH,GAAAoM,SAAAlL,QAAA;gBAAAQ,GAAA2K,SAAA7K,SAAA;;gBACAxB,GAAAoM,SAAAlL,QAAA,IAAAA,QAAA;gBAAAQ,GAAA2K,SAAA7K,SAAA,IAAAA,SAAA;;gBACAxB,GAAAoM,SAAAlL,QAAA,IAAAA;gBAAAQ,GAAA2K,SAAA7K,SAAA;;gBACAxB,GAAAoM,SAAAlL,QAAA,IAAAA,QAAA;gBAAAQ,GAAA2K,SAAA7K,SAAA,IAAAA,SAAA;;gBACAxB,GAAAoM,SAAAlL,QAAA;gBAAAQ,GAAA2K,SAAA7K,SAAA;iBAGAzC,SAAAoI,SAAArI,OAAAuK,OAAAhC;YAEAtI,OAAAe;gBACAwB,QAAA7E,KAAAoD,QAAA;gBACA0B,gBAAA9E,KAAAoD,QAAA;gBACAI,MAAAxD,KAAAoD,QAAA;gBAEAnC,QAAA8C,QAAAzB,OAAAe,KAAA,QAAApC,QAAA8C,OACA9C,QAAA+C,UAAA1B,OAAAe,KAAA,UAAApC,QAAA+C;YACA/C,QAAAgC,QAAAX,OAAAY,KAAA5C,KAAAW,QAAAgC,MACAX,OAAAY,KAAAC,aAAA,SAAAnD,KAAAoD,QAAA;YAEApD,KAAAgD,KAAAK;gBACA4B,GAAA3C,OAAAkC,UAAAO,SAAA;gBAGA/E,KAAAuC,MAAAoC,KAAArC,SACAA,OAAA0C,aAAAhF,KAAAgD,OAEAhD,KAAAkF;;QA/EA,IAAA9C,SAAAjC,8CAAA,IACAgC,WAAAhC,+CAAA,GAAAgC,UACAgD,UAAAhF,iDAAA,IACAuK,WAAAvF,QAAAuF;QA8EAvI,SAAAoL,WAAAnL,SAEAmL,UAAA7L,UAAA6E,SAAA;YAEAvG,KAAAsP,kBACAtP,UAAAsP,gBAAA,aAAAtP,KAAA6P;YAGA7P,KAAAuP,iBACAvP,UAAAuP,eAAA,aAAAvP,KAAA8P;YAGA,IAAAtJ,aAAAxG,KAAAoD,QAAA;YAEA,IAAApD,KAAA+P,eAAA;gBACA,IAAA5I,cAAAnH,KAAAoG;gBAEApG,KAAA+P,cAAArJ,iBACA1G,KAAA+P,cAAA9J,OAAAjG,KAAA8F,SAAA9F,KAAA+E,SAAAyB;gBACAxG,KAAA+P,cAAA/J,KAAAmB,YAAA5D,IAAAvD,KAAA+P,cAAAtL,QAAA,IACAzE,KAAA+P,cAAArJ,gBAAA;gBAEA1G,KAAA+P,cAAAxJ;;YAIA,IAAAvG,KAAAgQ,cAAA;gBACA,IAAAvJ,aAAAzG,KAAAsG;gBAEA,KAAAtG,KAAAgQ,aAAAtJ,cAAA;oBAEA1G,KAAAgQ,aAAA9J,KAAAO,WAAAxB,IAAAjF,KAAAgQ,aAAAjL,SAAA,IACA/E,KAAAgQ,aAAAjK,OAAA/F,KAAAuC,MAAAiC,UAAAjB,IAAAvD,KAAAyE,QAAA+B;oBAEA,IAAAG,OAAA3G;qBACA,SAAA4G;wBAGA,SADAC,MADAC,kBAAA,GAEA/G,IAAA,GAAAgH,MAAAJ,KAAAtE,MAAAqD,QAAApB,QAAAyC,MAAAhH,QAAA;4BACA8G,OAAAF,KAAAtE,MAAAqD,QAAA3F;4BAEA,IAAAiH,OAAAC,KAAAC,IAAAL,KAAAjB,YAAArC,IAAAoD,KAAAqJ,aAAApK,YAAArC;4BACA,IAAAsD,KAAAjB,YAAAX,IAAA0B,KAAAqJ,aAAApK,YAAAX,KAAA+B,QAAAL,KAAAqJ,aAAAvL,QAAA;gCACAqC,kBAAA;gCACA;;;wBAIAA,mBACAH,KAAAqJ,aAAAhK,KAAAa,KAAAhB,SAAAgB,KAAApC,QAAA+B;wBACAI;yBAIA5G,KAAAgQ,aAAAtJ,gBAAA,GAEA1G,KAAAgQ,aAAAzJ;;;WAKAgH,UAAA7L,UAAA0F,cAAA;YACApH,KAAA6P,cACA7P,KAAAqH,WAAArH,KAAA6P,YAAA7P,KAAAoD,QAAA,aAAApD,KAAAsP;YAGAtP,KAAA8P,aACA9P,KAAAqH,WAAArH,KAAA8P,WAAA9P,KAAAoD,QAAA,YAAApD,KAAAuP;WAIA7P,OAAAD,UAAA8N;;;;;;IP0gCM,SAAS7N,QAAQD,SAASU;QQ7pChC,SAAAU,UAAAiM,WAAA7L;YACAA,yBAEAjB,KAAAwC,QAAA,IAAAyN,QAAAnD,YAEA9M,KAAAiB,UAAAiB,SAAAjB,SAAAC;YAEAlB,KAAA0F,cACA1F,KAAAkJ,YACAlJ,KAAA4M,QAAA;;QAdA,IAAAqD,UAAA9P,mCAAA,KACA+B,WAAA/B,+CAAA,GAAA+B,UACAhB,iBAAAf,gDAAA,IACAoN,YAAApN,wDAAA;QAcAU,UAAAa,UAAAwO,SAAA,SAAA5N;YACAtC,KAAA0F,QAAA6B,QAAAjF,WAAA,MACAtC,KAAA0F,QAAAf,KAAArC;YAGA,IAAA6N,YAAAnQ;YAyBA,OAvBAsC,kBAAA,aACAA,OAAA0L,MAAA,SAAAoC;gBAKA,OAJA9N,OAAAuN,aAAAO,YACA9N,OAAAwN,cACAxN,OAAAyL,UAAA;gBAEAoC,UAAAD,OAAAE;eAEA9N,OAAA2L,KAAA,SAAAmC;gBAKA,OAJA9N,OAAAwN,YAAAM,YACA9N,OAAAuN,eACAvN,OAAAyL,UAAA;gBAEAoC,UAAAD,OAAAE;iBAGA9N,OAAA4L,OAAA,SAAAkC;gBAGA,OAFA9N,OAAAQ,OAAAsN,YACA9N,OAAAyL,UAAA,GACAoC,UAAAD,OAAAE;eAIA9N;WAGAzB,UAAAa,UAAAoM,YAAA,SAAAxL;YAEA,OADAtC,KAAA4M,QAAAtK,QACAtC,KAAAkQ,OAAA5N;WAGAzB,UAAAa,UAAA6E,SAAA;YACA,IAQAjE,QACAkF,MATAvD,WAAA,GACAoM,YAAA,GACAtQ,IAAA,GACAgH,MAAA,GACAwB,OAAA,GACA+H,OAAA,GACAC,OAAA,GACAC,OAAA;YAIA,KAAAzQ,IAAA,GAAAgH,MAAA/G,KAAA0F,QAAApB,QAAAyC,MAAAhH,QACAuC,SAAAtC,KAAA0F,QAAA3F,IACAuC,OAAAmC,QAAAR,aACAA,WAAA3B,OAAAmC;YAEAnC,OAAAyC,SAAAsL,cACAA,YAAA/N,OAAAyC;YAIA,KAAAhF,IAAA,GAAAgH,MAAA/G,KAAA0F,QAAApB,QAAAyC,MAAAhH,QACAuC,SAAAtC,KAAA0F,QAAA3F,IACAuC,OAAAyD,OAAA/F,KAAAiB,QAAAsC,KAAAU,WAAA3B,OAAAmC,SAAA,IAAAzE,KAAAiB,QAAA;YACAqB,OAAA2D,OAAAjG,KAAAiB,QAAAgE,KAAAoL,YAAA/N,OAAAyC,UAAA,IAAA/E,KAAAiB,QAAA;;;;;YASA,KANAjB,KAAA4M,MAAArG,UAMAxG,IAAA,GAAAgH,MAAA/G,KAAA0F,QAAApB,QAAAyC,MAAAhH,QACAuC,SAAAtC,KAAA0F,QAAA3F;YACAuC,OAAA8E;YAKA,KAFAmB,OAAAvI,KAAAyK,cAEA1K,IAAA,GAAAgH,MAAA/G,KAAA0F,QAAApB,QAAAyC,MAAAhH,QAAA;gBACAuC,SAAAtC,KAAA0F,QAAA3F;gBACA,IAAAwD,IAAAjB,OAAAuD,SAAAvD,OAAAmC,OACAQ,IAAA3C,OAAAwD,SAAAxD,OAAAyC;gBACAxB,IAAAgF,SACAA,OAAAhF,IAEA0B,IAAAqL,SACAA,OAAArL;;YAIA,KAAAlF,IAAA,GAAAgH,MAAA/G,KAAAkJ,MAAA5E,QAAAyC,MAAAhH,QAAA;gBACAyH,OAAAxH,KAAAkJ,MAAAnJ,GAAAyE;gBACA,IAAAjB,IAAAiE,KAAAjE,GACA0B,IAAAuC,KAAAvC,GACAwL,KAAAjJ,KAAAiJ,IACAC,KAAAlJ,KAAAkJ;gBACAH,OAAAhN,MACAgN,OAAAhN,IAEAiN,OAAAvL,MACAuL,OAAAvL,IAEAwL,KAAAlI,SACAA,OAAAkI,KAEAC,KAAAJ,SACAA,OAAAI;;YAIA,IAAAC,QAAA3Q,KAAAiB,QAAA,OACA2P,YAAA5Q,KAAAiB,QAAA;YAEA,IAAAsP,iBAAAK,YACA,IAAAJ,iBAAAI;YAEA,IAAAnM,QAAA8D,OAAAqI,YAAAL,MACAxL,SAAAuL,OAAAM,YAAAJ;YAEAxQ,KAAAwC,MAAAqO,QAAApM,QAAAkM,OAAA5L,SAAA4L,QACA3Q,KAAAwC,MAAAsO,WAAAP,MAAAC,MAAA/L,OAAAM,SAAA;WAGAlE,UAAAa,UAAA+L,QAAA;YACA,IAAAzN,KAAAwC,OAAA;gBACA,IAAAuO,WAAA/Q,KAAAwC,MAAAwO;gBACAD,SAAAE,WAAAC,YAAAH;;WAIArR,OAAAD,UAAAoB;;;;;;IR4qCM,SAASnB,QAAQD;;QS/zCvBC,OAAAD;YACA8D,GAAA;YACA0B,GAAA;YACAkM,cAAA;YACAC,eAAA;YACAC,eAAA;YACA5N,aAAA;YACA6N,cAAA;;;;YAIAC,cAAA;YACAC,iBAAA;YACAhO,MAAA;YACAiO,YAAA;YACAC,WAAA;YACAxG,aAAA;YACAyG,SAAA;YACAhB,OAAA;YACAjL;gBACAkH;gBACAgF;gBACAC;gBACAC;gBACAC;gBACAC;;;;;;;;ITk1CM,SAAStS,QAAQD;;QU32CvBwS,MAAAvQ,UAAA6F,YACA0K,MAAAvQ,UAAA6F,UAAA,SAAA2K;YACA;YACA,aAAAlS,MACA,UAAAmS;YAEA,IAAAC,IAAA5Q,OAAAxB,OACA+G,MAAAqL,EAAA9N,WAAA;YACA,UAAAyC,KACA;YAEA,IAAAsL,IAAA;YASA,IARAC,UAAAhO,SAAA,MACA+N,IAAAE,OAAAD,UAAA,KACAD,SACAA,IAAA,IACA,MAAAA,UAAAG,SAAAH,OAAAG,WACAH,SAAA,WAAApL,KAAAwL,MAAAxL,KAAAC,IAAAmL;YAGAA,KAAAtL,KACA;YAGA,KADA,IAAA2L,IAAAL,KAAA,IAAAA,IAAApL,KAAAyI,IAAA3I,MAAAE,KAAAC,IAAAmL,IAAA,IACAtL,MAAA2L,QACA,IAAAA,KAAAN,OAAAM,OAAAR,eACA,OAAAQ;YAGA;;QAKAT,MAAAvQ,UAAAiR,gBACAV,MAAAvQ,UAAAiR,cAAA,SAAAT;YACA;YACA,aAAAlS,MACA,UAAAmS;YAEA,IAAAC,IAAA5Q,OAAAxB,OACA+G,MAAAqL,EAAA9N,WAAA;YACA,UAAAyC,KACA;YAEA,IAAAsL,IAAAtL;YACAuL,UAAAhO,SAAA,MACA+N,IAAAE,OAAAD,UAAA,KACAD,SACAA,IAAA,IACA,MAAAA,UAAA,SAAAA,OAAA,WACAA,SAAA,WAAApL,KAAAwL,MAAAxL,KAAAC,IAAAmL;YAIA,KADA,IAAAK,IAAAL,KAAA,IAAApL,KAAA2L,IAAAP,GAAAtL,MAAA,KAAAA,MAAAE,KAAAC,IAAAmL,IACAK,KAAA,GAAAA,KACA,IAAAA,KAAAN,OAAAM,OAAAR,eACA,OAAAQ;YAGA;YAIAG,OAAAnR,UAAAiL,SACAkG,OAAAnR,UAAAiL,OAAA;YACA,OAAA3M,KAAAuO,QAAA;;;;;;;IVu3CM,SAAS7O,QAAQD,SAASU;QWv7ChC,SAAAgN,IAAA9K,OAAApB;YACA,IAAAqB,SAAAD,MAAAG,MAAAsQ,KAAA;YACA7R,yBACAA,QAAA+B,OAAA/B,QAAA+B,QAAA,OACAZ,OAAA5B,KAAAR,MAAAqC,OAAApB,SAAAqB;;QAPA,IAAAF,SAAAjC,8CAAA,IACAgC,WAAAhC,+CAAA,GAAAgC;QAQAA,SAAAgL,KAAA/K,SAEA1C,OAAAD,UAAA0N;;;;;;IXo8CM,SAASzN,QAAQD,SAASU;QY18ChC,SAAAkN,YAAAhL,OAAApB;YACAA,yBACAmB,OAAA5B,KAAAR,MAAAqC,OAAApB,UACAjB,KAAAqP,aAAArP,KAAAoD,QAAA;YAEApD,KAAAgD,KAAAK;gBACAE,GAAA,IAAAvD,KAAAqP;;YAGA,IAAA5K,QAAAzE,KAAAgD,KAAAwB,UAAAC,QAAA,IAAAzE,KAAAqP,YACAtK,SAAA/E,KAAAgD,KAAAwB,UAAAO,SAAA,IAAA/E,KAAAqP,YACAM,SAAA3P,KAAAqP,YACAO,SAAA7K,SAAA,GAEA6H;gBAAArJ,GAAAoM;gBAAA1K,GAAA2K;eACAhF;gBACArH,GAAAoM,SAAA3P,KAAAqP;gBAAApK,GAAAF;;gBACAxB,GAAAoM,SAAA3P,KAAAqP,aAAA5K;gBAAAQ,GAAAF;;gBACAxB,GAAAoM,SAAA3P,KAAAqP,aAAA5K,QAAA,IAAAzE,KAAAqP;gBAAApK,GAAA;;gBACA1B,GAAAoM,SAAA3P,KAAAqP,aAAA,IAAArP,KAAAqP;gBAAApK,GAAA;;gBACA1B,GAAAoM;gBAAA1K,GAAA2K;iBAGAtN,SAAAoI,SAAArI,OAAAuK,OAAAhC;YAEAtI,OAAAe;gBACAwB,QAAA7E,KAAAoD,QAAA;gBACA0B,gBAAA9E,KAAAoD,QAAA;gBACAI,MAAAxD,KAAAoD,QAAA;gBAEAnC,QAAA8C,QAAAzB,OAAAe,KAAA,QAAApC,QAAA8C,OACA9C,QAAA+C,UAAA1B,OAAAe,KAAA,UAAApC,QAAA+C;YACA/C,QAAAgC,QAAAX,OAAAY,KAAA5C,KAAAW,QAAAgC,MACAX,OAAAY,KAAAC,aAAA,SAAAnD,KAAAoD,QAAA;YAEApD,KAAAgD,KAAAK;gBACA4B,GAAA3C,OAAAkC,UAAAO,SAAA;gBAGA/E,KAAAuC,MAAAoC,KAAArC,SACAA,OAAA0C,aAAAhF,KAAAgD,OAEAhD,KAAAkF;;QA/CA,IAAA9C,SAAAjC,8CAAA,IACAgC,WAAAhC,+CAAA,GAAAgC,UACAgD,UAAAhF,iDAAA,IACAuK,WAAAvF,QAAAuF;QA8CAvI,SAAAkL,aAAAjL,SAEAiL,YAAA3L,UAAA2E,UAAA;YACA,IAAApB,IAAAjF,KAAA8F,SAAA9F,KAAAuC,MAAAiC,UAAAO,SAAA,GACAxB,IAAAvD,KAAA6F,SAAA7F,KAAAqP;YACA;gBAAA9L;gBAAA0B;;WAGAoI,YAAA3L,UAAA4E,WAAA;YACA,IAAArB,IAAAjF,KAAA8F,SAAA9F,KAAAuC,MAAAiC,UAAAO,SAAA,GACAxB,IAAAvD,KAAA6F,SAAA7F,KAAAuC,MAAAiC,UAAAC,QAAAzE,KAAAqP;YACA;gBAAA9L;gBAAA0B;;WAGAvF,OAAAD,UAAA4N;;;;;;IZy9CM,SAAS3N,QAAQD,SAASU;QarhDhC,SAAAiN,UAAA/K,OAAApB;YACA,IAAAqB,SAAAD,MAAAG,MAAAsQ,KAAA;YACA7R,yBACAmB,OAAA5B,KAAAR,MAAAqC,OAAApB,SAAAqB;;QANA,IAAAF,SAAAjC,8CAAA,IACAgC,WAAAhC,+CAAA,GAAAgC;QAOAA,SAAAiL,WAAAhL,SAEA1C,OAAAD,UAAA2N;;;;;;IbkiDM,SAAS1N,QAAQD,SAASU;QcziDhC,SAAA8M,MAAA5K,OAAApB;YACA,IAAAqB,SAAAD,MAAAG,MAAAsQ,KAAA;YACA7R,yBACAA,QAAA+B,OAAA/B,QAAA+B,QAAA,SACAZ,OAAA5B,KAAAR,MAAAqC,OAAApB,SAAAqB;;QAPA,IAAAF,SAAAjC,8CAAA,IACAgC,WAAAhC,+CAAA,GAAAgC;QAQAA,SAAA8K,OAAA7K,SAEA1C,OAAAD,UAAAwN;;;;;;Id6kDM,SAASvN,QAAQD,SAASU;QerlDhC,SAAAmN,WAAAjL,OAAApB;YACA,IAAAqB,SAAAD,MAAAG,MAAAsQ,KAAA;YACA7R,yBACAmB,OAAA5B,KAAAR,MAAAqC,OAAApB,SAAAqB,SAEAA,OAAAe;gBACAoB,OAAAzE,KAAAgD,KAAAwB,UAAAC,QAAA,IAAAzE,KAAAoD,QAAA;gBAGApD,KAAAgD,KAAAK;gBACAE,GAAA,IAAAvD,KAAAoD,QAAA;;YAGA,IAAA2P,YAAA1Q,MAAAG,MAAAsQ,KAAA;YACAC,UAAA1P;gBACAE,GAAAvD,KAAAoD,QAAA;gBACAyB,QAAA7E,KAAAoD,QAAA;gBACA0B,gBAAA9E,KAAAoD,QAAA;gBACAqB,OAAAzE,KAAAgD,KAAAwB,UAAAC,QAAA,IAAAzE,KAAAoD,QAAA;gBACA2B,QAAA/E,KAAAgD,KAAAwB,UAAAO,SAAA,IAAA/E,KAAAoD,QAAA;gBACAI,MAAAxD,KAAAoD,QAAA;gBAEAnC,QAAAgC,QAAA8P,UAAA7P,KAAA5C,KAAAW,QAAAgC,MAAA;YAEA,IAAAS,OAAA1D,KAAAoD,QAAA,SACAO,QAAA3D,KAAAoD,QAAA,gBACAQ,QAAA5D,KAAAoD,QAAA;YAEAM,QAAAqP,UAAA1P;gBAAAK;gBACAC,SAAAoP,UAAA1P;gBAAAQ,eAAAF;gBACAC,SAAAmP,UAAA1P;gBAAAS,eAAAF;gBAEA3C,QAAA8C,QAAAgP,UAAA1P,KAAA,QAAApC,QAAA8C,OACA9C,QAAA+C,UAAA+O,UAAA1P,KAAA,UAAApC,QAAA+C;YACAhE,KAAAuC,MAAAoC,KAAAoO,YACAA,UAAA/N,aAAAhF,KAAAgD,OAEAhD,KAAAkF;;QAxCA,IAAA9C,SAAAjC,8CAAA,IACAgC,WAAAhC,+CAAA,GAAAgC;QAyCAA,SAAAmL,YAAAlL,SAEA1C,OAAAD,UAAA6N;;;;;;IfkmDM,SAAS5N,QAAQD,SAASU;QgB9oDhC,0BAAA6S,QAAA;YACA,IAAApS,QAAAT,6CAAA;aACA,SAAA8S;gBACAA,EAAAC,GAAA/C,YAAA,SAAAlP;oBACA,OAAAjB,KAAAmT,KAAA;wBACA,IAAAC,QAAAH,EAAAjT,OACAqC,QAAAzB,MAAAwS,MAAApQ;wBACAoQ,MAAAC,KAAA,KACAhR,MAAAwK,QAAA7M,MAAAiB;;;cAGA+R;;;;;;;IhBypDM,SAAStT,QAAQD;QiBpqDvBC,OAAAD,UAAAQ","file":"flowchart.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(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_15__) {\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 */ 8);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 14);\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\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 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\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 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 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.next_direction);\n\t } else {\n\t this.drawLineTo(this.next);\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 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) {\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 }\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 }\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 }\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 */ 6);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 12);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 9);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 11);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 10);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 13);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\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 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 {\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 (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) {\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 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];\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],\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null\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\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 }\n\t\n\t }\n\t return chart;\n\t}\n\t\n\tmodule.exports = parse;\n\n\n/***/ },\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction Condition(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\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 {\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 {\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 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 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.chart.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 15);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 7);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\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 {\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 for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t var x = symbol.getX() + symbol.width;\n\t var 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 var x = line.x;\n\t var 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 (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/***/ },\n/* 7 */\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 }//,\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/***/ },\n/* 8 */\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/* 9 */\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/* 10 */\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/* 11 */\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/* 12 */\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/* 13 */\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/* 14 */\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/* 15 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** flowchart.js\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/** WEBPACK FOOTER **\n ** webpack/bootstrap 41178340126627f4fc47\n **/","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\n **/","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\n **/","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\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 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\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.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 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.next_direction);\n } else {\n this.drawLineTo(this.next);\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 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) {\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 }\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 }\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\n **/","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 }\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\n **/","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');\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 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 {\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 (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) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\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];\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0],\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null\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\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 }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.parse.js\n ** module id = 4\n ** module chunks = 0\n **/","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 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 {\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 {\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 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 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\n **/","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\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 {\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 for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n var x = symbol.getX() + symbol.width;\n var 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 var x = line.x;\n var 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 (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/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.chart.js\n ** module id = 6\n ** module chunks = 0\n **/","// 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 }//,\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/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.defaults.js\n ** module id = 7\n ** module chunks = 0\n **/","// 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 = 8\n ** module chunks = 0\n **/","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 = 9\n ** module chunks = 0\n **/","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 = 10\n ** module chunks = 0\n **/","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 = 11\n ** module chunks = 0\n **/","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 = 12\n ** module chunks = 0\n **/","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 = 13\n ** module chunks = 0\n **/","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 = 14\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"Raphael\"\n ** module id = 15\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/release/flowchart.min.js b/release/flowchart.min.js index a80b372..22e4df8 100644 --- a/release/flowchart.min.js +++ b/release/flowchart.min.js @@ -1,7 +1,7 @@ -// flowchart.js, v1.6.1 +// flowchart.js, v1.6.3 // Copyright (c)yyyy 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(8);var r=e(4);e(14);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.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 n=this.getAttr("maxWidth");if(n){for(var h=i.text.split(" "),a="",x=0,y=h.length;y>x;x++){var l=h[x];this.text.attr("text",a+" "+l),a+=this.text.getBBox().width>n?"\n"+l:" "+l}this.text.attr("text",a.substring(1))}if(this.group.push(this.text),e){var g=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*g,height:this.text.getBBox().height+2*g}),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,n=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.getAttr("line-length");if("right"===this.next_direction){var i=this.getRight();if(!this.next.isPositioned){this.next.setY(i.y-this.next.height/2),this.next.shiftX(this.group.getBBox().x+this.width+t);var e=this;!function s(){for(var i,r=!1,o=0,n=e.chart.symbols.length;n>o;o++){i=e.chart.symbols[o];var h=Math.abs(i.getCenter().x-e.next.getCenter().x);if(i.getCenter().y>e.next.getCenter().y&&h<=e.next.width/2){r=!0;break}}r&&(e.next.setX(i.getX()+i.width+t),s())}(),this.next.isPositioned=!0,this.next.render()}}else{var r=this.getBottom();this.next.isPositioned||(this.next.shiftY(this.getY()+this.height+t),this.next.setX(r.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.next_direction):this.drawLineTo(this.next))},r.prototype.drawLineTo=function(t,i,e){this.connectedTo.indexOf(t)<0&&this.connectedTo.push(t);var r,s=this.getCenter().x,h=this.getCenter().y,a=this.getRight(),x=this.getBottom(),y=this.getLeft(),l=t.getCenter().x,g=t.getCenter().y,f=t.getTop(),p=t.getRight(),c=t.getLeft(),u=s===l,d=h===g,m=g>h,b=h>g,v=s>l,w=l>s,k=0,_=this.getAttr("line-length"),B=this.getAttr("line-width");if(e&&"bottom"!==e||!u||!m)if(e&&"right"!==e||!d||!w)if(e&&"left"!==e||!d||!v)if(e&&"right"!==e||!u||!b)if(e&&"right"!==e||!u||!m)if(e&&"bottom"!==e||!v)if(e&&"bottom"!==e||!w)if(e&&"right"===e&&v)r=o(this.chart,a,[{x:a.x+_/2,y:a.y},{x:a.x+_/2,y:f.y-_/2},{x:f.x,y:f.y-_/2},{x:f.x,y:f.y}],i),this.rightStart=!0,t.topEnd=!0,k=a.x+_/2;else if(e&&"right"===e&&w)r=o(this.chart,a,[{x:f.x,y:a.y},{x:f.x,y:f.y}],i),this.rightStart=!0,t.topEnd=!0,k=a.x+_/2;else if(e&&"bottom"===e&&u&&b)r=o(this.chart,x,[{x:x.x,y:x.y+_/2},{x:a.x+_/2,y:x.y+_/2},{x:a.x+_/2,y:f.y-_/2},{x:f.x,y:f.y-_/2},{x:f.x,y:f.y}],i),this.bottomStart=!0,t.topEnd=!0,k=x.x+_/2;else if("left"===e&&u&&b){var A=y.x-_/2;c.xL;L++)for(var O,X=this.chart.lines[L],T=X.attr("path"),Y=r.attr("path"),C=0,S=T.length-1;S>C;C++){var j=[];j.push(["M",T[C][1],T[C][2]]),j.push(["L",T[C+1][1],T[C+1][2]]);for(var E=j[0][1],z=j[0][2],P=j[1][1],R=j[1][2],F=0,I=Y.length-1;I>F;F++){var W=[];W.push(["M",Y[F][1],Y[F][2]]),W.push(["L",Y[F+1][1],Y[F+1][2]]);var N=W[0][1],V=W[0][2],q=W[1][1],G=W[1][2],Q=n(E,z,P,R,N,V,q,G);if(Q.onLine1&&Q.onLine2){var $;V===G?N>q?($=["L",Q.x+2*B,V],Y.splice(F+1,0,$),$=["C",Q.x+2*B,V,Q.x,V-4*B,Q.x-2*B,V],Y.splice(F+2,0,$),r.attr("path",Y)):($=["L",Q.x-2*B,V],Y.splice(F+1,0,$),$=["C",Q.x-2*B,V,Q.x,V-4*B,Q.x+2*B,V],Y.splice(F+2,0,$),r.attr("path",Y)):V>G?($=["L",N,Q.y+2*B],Y.splice(F+1,0,$),$=["C",N,Q.y+2*B,N+4*B,Q.y,N,Q.y-2*B],Y.splice(F+2,0,$),r.attr("path",Y)):($=["L",N,Q.y-2*B],Y.splice(F+1,0,$),$=["C",N,Q.y-2*B,N+4*B,Q.y,N,Q.y+2*B],Y.splice(F+2,0,$),r.attr("path",Y)),F+=2,O+=2}}}this.chart.lines.push(r)}(!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;s>r;r+=2)o+=" L{"+r+"},{"+(r+1)+"}";var n=[i.x,i.y];for(r=0,s=e.length;s>r;r++)n.push(e[r].x),n.push(e[r].y);var h=t.paper.path(o,n);h.attr("stroke",t.options["element-color"]),h.attr("stroke-width",t.options["line-width"]);var a=t.options.font,x=t.options["font-family"],y=t.options["font-weight"];return a&&h.attr({font:a}),x&&h.attr({"font-family":x}),y&&h.attr({"font-weight":y}),h}function r(t,i,e,r){var s,o;"[object Array]"!==Object.prototype.toString.call(e)&&(e=[e]);var n="M{0},{1}";for(s=2,o=2*e.length+2;o>s;s+=2)n+=" L{"+s+"},{"+(s+1)+"}";var h=[i.x,i.y];for(s=0,o=e.length;o>s;s++)h.push(e[s].x),h.push(e[s].y);var a=t.paper.path(n,h);a.attr({stroke:t.options["line-color"],"stroke-width":t.options["line-width"],"arrow-end":t.options["arrow-end"]});var x=t.options.font,y=t.options["font-family"],l=t.options["font-weight"];if(x&&a.attr({font:x}),y&&a.attr({"font-family":y}),l&&a.attr({"font-weight":l}),r){var g=!1,f=t.paper.text(0,0,r),p=!1,c=e[0];i.y===c.y&&(p=!0);var u=0,d=0;g?(u=i.x>c.x?i.x-(i.x-c.x)/2:c.x-(c.x-i.x)/2,d=i.y>c.y?i.y-(i.y-c.y)/2:c.y-(c.y-i.y)/2,p?(u-=f.getBBox().width/2,d-=t.options["text-margin"]):(u+=t.options["text-margin"],d-=f.getBBox().height/2)):(u=i.x,d=i.y,p?(u+=t.options["text-margin"]/2,d-=t.options["text-margin"]):(u+=t.options["text-margin"]/2,d+=t.options["text-margin"])),f.attr({"text-anchor":"start","font-size":t.options["font-size"],fill:t.options["font-color"],x:u,y:d}),x&&f.attr({font:x}),y&&f.attr({"font-family":y}),l&&f.attr({"font-weight":l})}return a}function s(t,i,e,r,s,o,n,h){var a,x,y,l,g,f={x:null,y:null,onLine1:!1,onLine2:!1};return a=(h-o)*(e-t)-(n-s)*(r-i),0===a?f:(x=i-o,y=t-s,l=(n-s)*x-(h-o)*y,g=(e-t)*x-(r-i)*y,x=l/a,y=g/a,f.x=t+x*(e-t),f.y=i+x*(r-i),x>0&&1>x&&(f.onLine1=!0),y>0&&1>y&&(f.onLine2=!0),f)}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?r.symbols[t.substring(0,i-1)]:r.symbols[t]}function e(t){var i="next",e=t.indexOf("(")+1,r=t.indexOf(")");return e>=0&&r>=0&&(i=X.substring(e,r),i.indexOf(",")<0&&"yes"!==i&&"no"!==i&&(i="next, "+i)),i}t=t||"",t=t.trim();for(var r={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(l,t);break;case"end":g[t.key]=new n(l,t);break;case"operation":g[t.key]=new h(l,t);break;case"inputoutput":g[t.key]=new a(l,t);break;case"subroutine":g[t.key]=new x(l,t);break;case"condition":g[t.key]=new y(l,t);break;default:return new Error("Wrong symbol type!")}return g[t.key]}var r=this;this.diagram&&this.diagram.clean();var l=new s(t,i);this.diagram=l;var g={};!function f(t,i,s){var o=e(t);return r.start===t?l.startWith(o):i&&s&&!i.pathOk&&(i instanceof y?(s.yes===t&&i.yes(o),s.no===t&&i.no(o)):i.then(o)),o.pathOk?o:(o instanceof y?(t.yes&&f(t.yes,o,t),t.no&&f(t.no,o,t)):t.next&&f(t.next,o,t),o)}(this.start),l.render()},clean:function(){this.diagram.clean()}},l=[],g=0,f=1,p=t.length;p>f;f++)if("\n"===t[f]&&"\\"!==t[f-1]){var c=t.substring(g,f);g=f+1,l.push(c.replace(/\\\n/g,"\n"))}gu;){var m=l[u];m.indexOf("->")<0&&m.indexOf("=>")<0?(l[u-1]+="\n"+m,l.splice(u,1),d--):u++}for(;l.length>0;){var b=l.splice(0,1)[0];if(b.indexOf("=>")>=0){var v,w=b.split("=>"),k={key:w[0],symbolType:w[1],text:null,link:null,target:null,flowstate:null};if(k.symbolType.indexOf(": ")>=0&&(v=k.symbolType.split(": "),k.symbolType=v.shift(),k.text=v.join(": ")),k.text&&k.text.indexOf(":>")>=0?(v=k.text.split(":>"),k.text=v.shift(),k.link=v.join(":>")):k.symbolType.indexOf(":>")>=0&&(v=k.symbolType.split(":>"),k.symbolType=v.shift(),k.link=v.join(":>")),k.symbolType.indexOf("\n")>=0&&(k.symbolType=k.symbolType.split("\n")[0]),k.link){var _=k.link.indexOf("[")+1,B=k.link.indexOf("]");_>=0&&B>=0&&(k.target=k.link.substring(_,B),k.link=k.link.substring(0,_-1))}if(k.text&&k.text.indexOf("|")>=0){var A=k.text.split("|");k.flowstate=A.pop().trim(),k.text=A.join("|")}r.symbols[k.key]=k}else if(b.indexOf("->")>=0)for(var L=b.split("->"),M=0,O=L.length;O>M;M++){var X=L[M],T=i(X),Y=e(X),C=null;if(Y.indexOf(",")>=0){var S=Y.split(",");Y=S[0],C=S[1].trim()}if(r.start||(r.start=T),O>M+1){var j=L[M+1];T[Y]=i(j),T["direction_"+Y]=C,C=null}}}return r}var s=e(6),o=e(12),n=e(9),h=e(11),a=e(10),x=e(13),y=e(5);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.yes_direction="bottom",this.no_direction="right",i.yes&&i.direction_yes&&i.no&&!i.direction_no?"right"===i.direction_yes?(this.no_direction="bottom",this.yes_direction="right"):(this.no_direction="right",this.yes_direction="bottom"):i.yes&&!i.direction_yes&&i.no&&i.direction_no?"right"===i.direction_no?(this.yes_direction="bottom",this.no_direction="right"):(this.yes_direction="right",this.no_direction="bottom"):(this.yes_direction="bottom",this.no_direction="right"),this.yes_direction=this.yes_direction||"bottom",this.no_direction=this.no_direction||"right",this.text.attr({x:2*this.textMargin});var e=this.text.getBBox().width+3*this.textMargin;e+=e/2;var r=this.text.getBBox().height+2*this.textMargin;r+=r/2,r=Math.max(.5*e,r);var o=e/4,n=r/4;this.text.attr({x:o+this.textMargin/2});var a={x:o,y:n},x=[{x:o-e/4,y:n+r/4},{x:o-e/4+e/2,y:n+r/4+r/2},{x:o-e/4+e,y:n+r/4},{x:o-e/4+e/2,y:n+r/4-r/2},{x:o-e/4,y:n+r/4}],y=h(t,a,x);y.attr({stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),fill:this.getAttr("fill")}),i.link&&y.attr("href",i.link),i.target&&y.attr("target",i.target),i.key&&(y.node.id=i.key),y.node.setAttribute("class",this.getAttr("class")),this.text.attr({y:y.getBBox().height/2}),this.group.push(y),y.insertBefore(this.text),this.initialize()}var s=e(2),o=e(1).inherits,n=e(3),h=n.drawPath;o(r,s),r.prototype.render=function(){this.yes_direction&&(this[this.yes_direction+"_symbol"]=this.yes_symbol),this.no_direction&&(this[this.no_direction+"_symbol"]=this.no_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.right_symbol){var e=this.getRight();if(!this.right_symbol.isPositioned){this.right_symbol.setY(e.y-this.right_symbol.height/2),this.right_symbol.shiftX(this.group.getBBox().x+this.width+t);var r=this;!function s(){for(var i,e=!1,o=0,n=r.chart.symbols.length;n>o;o++){i=r.chart.symbols[o];var h=Math.abs(i.getCenter().x-r.right_symbol.getCenter().x);if(i.getCenter().y>r.right_symbol.getCenter().y&&h<=r.right_symbol.width/2){e=!0;break}}e&&(r.right_symbol.setX(i.getX()+i.width+t),s())}(),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){i=i||{},this.paper=new s(t),this.options=o(i,n),this.symbols=[],this.lines=[],this.start=null}var s=e(15),o=e(1).defaults,n=e(7),h=e(5);r.prototype.handle=function(t){this.symbols.indexOf(t)<=-1&&this.symbols.push(t);var i=this;return t instanceof h?(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.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,n=0,h=0;for(s=0,o=this.symbols.length;o>s;s++)t=this.symbols[s],t.width>e&&(e=t.width),t.height>r&&(r=t.height);for(s=0,o=this.symbols.length;o>s;s++)t=this.symbols[s],t.shiftX(this.options.x+(e-t.width)/2+this.options["line-width"]),t.shiftY(this.options.y+(r-t.height)/2+this.options["line-width"]);for(this.start.render(),s=0,o=this.symbols.length;o>s;s++)t=this.symbols[s],t.renderLines();for(n=this.maxXFromLine,s=0,o=this.symbols.length;o>s;s++){t=this.symbols[s];var a=t.getX()+t.width,x=t.getY()+t.height;a>n&&(n=a),x>h&&(h=x)}for(s=0,o=this.lines.length;o>s;s++){i=this.lines[s].getBBox();var a=i.x2,x=i.y2;a>n&&(n=a),x>h&&(h=x)}var y=this.options.scale,l=this.options["line-width"];this.paper.setSize(n*y+l*y,h*y+l*y),this.paper.setViewBox(0,0,n+l,h+l,!0)},r.prototype.clean=function(){if(this.paper){var t=this.paper.canvas;t.parentNode.removeChild(t)}},t.exports=r},function(t,i){t.exports={x:0,y:0,"line-width":3,"line-length":50,"text-margin":10,"font-size":14,"font-color":"black","line-color":"black","element-color":"black",fill:"white","yes-text":"yes","no-text":"no","arrow-end":"block","class":"flowchart",scale:1,symbols:{start:{},end:{},condition:{},inputoutput:{},operation:{},subroutine:{}}}},function(t,i){Array.prototype.indexOf||(Array.prototype.indexOf=function(t){"use strict";if(null===this)throw new TypeError;var i=Object(this),e=i.length>>>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);e>s;s++)if(s in i&&i[s]===t)return s;return-1}),Array.prototype.lastIndexOf||(Array.prototype.lastIndexOf=function(t){"use strict";if(null===this)throw new TypeError;var i=Object(this),e=i.length>>>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,n=r/2,a={x:o,y:n},x=[{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:n}],y=h(t,a,x);y.attr({stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),fill:this.getAttr("fill")}),i.link&&y.attr("href",i.link),i.target&&y.attr("target",i.target),i.key&&(y.node.id=i.key),y.node.setAttribute("class",this.getAttr("class")),this.text.attr({y:y.getBBox().height/2}),this.group.push(y),y.insertBefore(this.text),this.initialize()}var s=e(2),o=e(1).inherits,n=e(3),h=n.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"),n=this.getAttr("font-family"),h=this.getAttr("font-weight");o&&r.attr({font:o}),n&&r.attr({"font-family":n}),h&&r.attr({"font-weight":h}),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(8);var r=e(4);e(14);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.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 n=this.getAttr("maxWidth");if(n){for(var h=i.text.split(" "),a="",x=0,y=h.length;y>x;x++){var l=h[x];this.text.attr("text",a+" "+l),a+=this.text.getBBox().width>n?"\n"+l:" "+l}this.text.attr("text",a.substring(1))}if(this.group.push(this.text),e){var g=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*g,height:this.text.getBBox().height+2*g}),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,n=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.getAttr("line-length");if("right"===this.next_direction){var i=this.getRight();if(!this.next.isPositioned){this.next.setY(i.y-this.next.height/2),this.next.shiftX(this.group.getBBox().x+this.width+t);var e=this;!function s(){for(var i,r=!1,o=0,n=e.chart.symbols.length;n>o;o++){i=e.chart.symbols[o];var h=Math.abs(i.getCenter().x-e.next.getCenter().x);if(i.getCenter().y>e.next.getCenter().y&&h<=e.next.width/2){r=!0;break}}r&&(e.next.setX(i.getX()+i.width+t),s())}(),this.next.isPositioned=!0,this.next.render()}}else{var r=this.getBottom();this.next.isPositioned||(this.next.shiftY(this.getY()+this.height+t),this.next.setX(r.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.next_direction):this.drawLineTo(this.next))},r.prototype.drawLineTo=function(t,i,e){this.connectedTo.indexOf(t)<0&&this.connectedTo.push(t);var r,s=this.getCenter().x,h=this.getCenter().y,a=this.getRight(),x=this.getBottom(),y=this.getLeft(),l=t.getCenter().x,g=t.getCenter().y,f=t.getTop(),p=t.getRight(),c=t.getLeft(),u=s===l,d=h===g,m=g>h,b=h>g||this===t,v=s>l,w=l>s,k=0,_=this.getAttr("line-length"),B=this.getAttr("line-width");if(e&&"bottom"!==e||!u||!m)if(e&&"right"!==e||!d||!w)if(e&&"left"!==e||!d||!v)if(e&&"right"!==e||!u||!b)if(e&&"right"!==e||!u||!m)if(e&&"bottom"!==e||!v)if(e&&"bottom"!==e||!w)if(e&&"right"===e&&v)r=o(this.chart,a,[{x:a.x+_/2,y:a.y},{x:a.x+_/2,y:f.y-_/2},{x:f.x,y:f.y-_/2},{x:f.x,y:f.y}],i),this.rightStart=!0,t.topEnd=!0,k=a.x+_/2;else if(e&&"right"===e&&w)r=o(this.chart,a,[{x:f.x,y:a.y},{x:f.x,y:f.y}],i),this.rightStart=!0,t.topEnd=!0,k=a.x+_/2;else if(e&&"bottom"===e&&u&&b)r=o(this.chart,x,[{x:x.x,y:x.y+_/2},{x:a.x+_/2,y:x.y+_/2},{x:a.x+_/2,y:f.y-_/2},{x:f.x,y:f.y-_/2},{x:f.x,y:f.y}],i),this.bottomStart=!0,t.topEnd=!0,k=x.x+_/2;else if("left"===e&&u&&b){var A=y.x-_/2;c.xL;L++)for(var O,X=this.chart.lines[L],T=X.attr("path"),Y=r.attr("path"),C=0,S=T.length-1;S>C;C++){var j=[];j.push(["M",T[C][1],T[C][2]]),j.push(["L",T[C+1][1],T[C+1][2]]);for(var E=j[0][1],z=j[0][2],P=j[1][1],R=j[1][2],F=0,I=Y.length-1;I>F;F++){var W=[];W.push(["M",Y[F][1],Y[F][2]]),W.push(["L",Y[F+1][1],Y[F+1][2]]);var N=W[0][1],V=W[0][2],q=W[1][1],G=W[1][2],Q=n(E,z,P,R,N,V,q,G);if(Q.onLine1&&Q.onLine2){var $;V===G?N>q?($=["L",Q.x+2*B,V],Y.splice(F+1,0,$),$=["C",Q.x+2*B,V,Q.x,V-4*B,Q.x-2*B,V],Y.splice(F+2,0,$),r.attr("path",Y)):($=["L",Q.x-2*B,V],Y.splice(F+1,0,$),$=["C",Q.x-2*B,V,Q.x,V-4*B,Q.x+2*B,V],Y.splice(F+2,0,$),r.attr("path",Y)):V>G?($=["L",N,Q.y+2*B],Y.splice(F+1,0,$),$=["C",N,Q.y+2*B,N+4*B,Q.y,N,Q.y-2*B],Y.splice(F+2,0,$),r.attr("path",Y)):($=["L",N,Q.y-2*B],Y.splice(F+1,0,$),$=["C",N,Q.y-2*B,N+4*B,Q.y,N,Q.y+2*B],Y.splice(F+2,0,$),r.attr("path",Y)),F+=2,O+=2}}}this.chart.lines.push(r)}(!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;s>r;r+=2)o+=" L{"+r+"},{"+(r+1)+"}";var n=[i.x,i.y];for(r=0,s=e.length;s>r;r++)n.push(e[r].x),n.push(e[r].y);var h=t.paper.path(o,n);h.attr("stroke",t.options["element-color"]),h.attr("stroke-width",t.options["line-width"]);var a=t.options.font,x=t.options["font-family"],y=t.options["font-weight"];return a&&h.attr({font:a}),x&&h.attr({"font-family":x}),y&&h.attr({"font-weight":y}),h}function r(t,i,e,r){var s,o;"[object Array]"!==Object.prototype.toString.call(e)&&(e=[e]);var n="M{0},{1}";for(s=2,o=2*e.length+2;o>s;s+=2)n+=" L{"+s+"},{"+(s+1)+"}";var h=[i.x,i.y];for(s=0,o=e.length;o>s;s++)h.push(e[s].x),h.push(e[s].y);var a=t.paper.path(n,h);a.attr({stroke:t.options["line-color"],"stroke-width":t.options["line-width"],"arrow-end":t.options["arrow-end"]});var x=t.options.font,y=t.options["font-family"],l=t.options["font-weight"];if(x&&a.attr({font:x}),y&&a.attr({"font-family":y}),l&&a.attr({"font-weight":l}),r){var g=!1,f=t.paper.text(0,0,r),p=!1,c=e[0];i.y===c.y&&(p=!0);var u=0,d=0;g?(u=i.x>c.x?i.x-(i.x-c.x)/2:c.x-(c.x-i.x)/2,d=i.y>c.y?i.y-(i.y-c.y)/2:c.y-(c.y-i.y)/2,p?(u-=f.getBBox().width/2,d-=t.options["text-margin"]):(u+=t.options["text-margin"],d-=f.getBBox().height/2)):(u=i.x,d=i.y,p?(u+=t.options["text-margin"]/2,d-=t.options["text-margin"]):(u+=t.options["text-margin"]/2,d+=t.options["text-margin"])),f.attr({"text-anchor":"start","font-size":t.options["font-size"],fill:t.options["font-color"],x:u,y:d}),x&&f.attr({font:x}),y&&f.attr({"font-family":y}),l&&f.attr({"font-weight":l})}return a}function s(t,i,e,r,s,o,n,h){var a,x,y,l,g,f={x:null,y:null,onLine1:!1,onLine2:!1};return a=(h-o)*(e-t)-(n-s)*(r-i),0===a?f:(x=i-o,y=t-s,l=(n-s)*x-(h-o)*y,g=(e-t)*x-(r-i)*y,x=l/a,y=g/a,f.x=t+x*(e-t),f.y=i+x*(r-i),x>0&&1>x&&(f.onLine1=!0),y>0&&1>y&&(f.onLine2=!0),f)}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?r.symbols[t.substring(0,i-1)]:r.symbols[t]}function e(t){var i="next",e=t.indexOf("(")+1,r=t.indexOf(")");return e>=0&&r>=0&&(i=X.substring(e,r),i.indexOf(",")<0&&"yes"!==i&&"no"!==i&&(i="next, "+i)),i}t=t||"",t=t.trim();for(var r={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(l,t);break;case"end":g[t.key]=new n(l,t);break;case"operation":g[t.key]=new h(l,t);break;case"inputoutput":g[t.key]=new a(l,t);break;case"subroutine":g[t.key]=new x(l,t);break;case"condition":g[t.key]=new y(l,t);break;default:return new Error("Wrong symbol type!")}return g[t.key]}var r=this;this.diagram&&this.diagram.clean();var l=new s(t,i);this.diagram=l;var g={};!function f(t,i,s){var o=e(t);return r.start===t?l.startWith(o):i&&s&&!i.pathOk&&(i instanceof y?(s.yes===t&&i.yes(o),s.no===t&&i.no(o)):i.then(o)),o.pathOk?o:(o instanceof y?(t.yes&&f(t.yes,o,t),t.no&&f(t.no,o,t)):t.next&&f(t.next,o,t),o)}(this.start),l.render()},clean:function(){this.diagram.clean()}},l=[],g=0,f=1,p=t.length;p>f;f++)if("\n"===t[f]&&"\\"!==t[f-1]){var c=t.substring(g,f);g=f+1,l.push(c.replace(/\\\n/g,"\n"))}gu;){var m=l[u];m.indexOf("->")<0&&m.indexOf("=>")<0?(l[u-1]+="\n"+m,l.splice(u,1),d--):u++}for(;l.length>0;){var b=l.splice(0,1)[0];if(b.indexOf("=>")>=0){var v,w=b.split("=>"),k={key:w[0],symbolType:w[1],text:null,link:null,target:null,flowstate:null};if(k.symbolType.indexOf(": ")>=0&&(v=k.symbolType.split(": "),k.symbolType=v.shift(),k.text=v.join(": ")),k.text&&k.text.indexOf(":>")>=0?(v=k.text.split(":>"),k.text=v.shift(),k.link=v.join(":>")):k.symbolType.indexOf(":>")>=0&&(v=k.symbolType.split(":>"),k.symbolType=v.shift(),k.link=v.join(":>")),k.symbolType.indexOf("\n")>=0&&(k.symbolType=k.symbolType.split("\n")[0]),k.link){var _=k.link.indexOf("[")+1,B=k.link.indexOf("]");_>=0&&B>=0&&(k.target=k.link.substring(_,B),k.link=k.link.substring(0,_-1))}if(k.text&&k.text.indexOf("|")>=0){var A=k.text.split("|");k.flowstate=A.pop().trim(),k.text=A.join("|")}r.symbols[k.key]=k}else if(b.indexOf("->")>=0)for(var L=b.split("->"),M=0,O=L.length;O>M;M++){var X=L[M],T=i(X),Y=e(X),C=null;if(Y.indexOf(",")>=0){var S=Y.split(",");Y=S[0],C=S[1].trim()}if(r.start||(r.start=T),O>M+1){var j=L[M+1];T[Y]=i(j),T["direction_"+Y]=C,C=null}}}return r}var s=e(6),o=e(12),n=e(9),h=e(11),a=e(10),x=e(13),y=e(5);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.yes_direction="bottom",this.no_direction="right",i.yes&&i.direction_yes&&i.no&&!i.direction_no?"right"===i.direction_yes?(this.no_direction="bottom",this.yes_direction="right"):(this.no_direction="right",this.yes_direction="bottom"):i.yes&&!i.direction_yes&&i.no&&i.direction_no?"right"===i.direction_no?(this.yes_direction="bottom",this.no_direction="right"):(this.yes_direction="right",this.no_direction="bottom"):(this.yes_direction="bottom",this.no_direction="right"),this.yes_direction=this.yes_direction||"bottom",this.no_direction=this.no_direction||"right",this.text.attr({x:2*this.textMargin});var e=this.text.getBBox().width+3*this.textMargin;e+=e/2;var r=this.text.getBBox().height+2*this.textMargin;r+=r/2,r=Math.max(.5*e,r);var o=e/4,n=r/4;this.text.attr({x:o+this.textMargin/2});var a={x:o,y:n},x=[{x:o-e/4,y:n+r/4},{x:o-e/4+e/2,y:n+r/4+r/2},{x:o-e/4+e,y:n+r/4},{x:o-e/4+e/2,y:n+r/4-r/2},{x:o-e/4,y:n+r/4}],y=h(t,a,x);y.attr({stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),fill:this.getAttr("fill")}),i.link&&y.attr("href",i.link),i.target&&y.attr("target",i.target),i.key&&(y.node.id=i.key),y.node.setAttribute("class",this.getAttr("class")),this.text.attr({y:y.getBBox().height/2}),this.group.push(y),y.insertBefore(this.text),this.initialize()}var s=e(2),o=e(1).inherits,n=e(3),h=n.drawPath;o(r,s),r.prototype.render=function(){this.yes_direction&&(this[this.yes_direction+"_symbol"]=this.yes_symbol),this.no_direction&&(this[this.no_direction+"_symbol"]=this.no_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.right_symbol){var e=this.getRight();if(!this.right_symbol.isPositioned){this.right_symbol.setY(e.y-this.right_symbol.height/2),this.right_symbol.shiftX(this.group.getBBox().x+this.width+t);var r=this;!function s(){for(var i,e=!1,o=0,n=r.chart.symbols.length;n>o;o++){i=r.chart.symbols[o];var h=Math.abs(i.getCenter().x-r.right_symbol.getCenter().x);if(i.getCenter().y>r.right_symbol.getCenter().y&&h<=r.right_symbol.width/2){e=!0;break}}e&&(r.right_symbol.setX(i.getX()+i.width+t),s())}(),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){i=i||{},this.paper=new s(t),this.options=o(i,n),this.symbols=[],this.lines=[],this.start=null}var s=e(15),o=e(1).defaults,n=e(7),h=e(5);r.prototype.handle=function(t){this.symbols.indexOf(t)<=-1&&this.symbols.push(t);var i=this;return t instanceof h?(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.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,n=0,h=0,a=0,x=0;for(s=0,o=this.symbols.length;o>s;s++)t=this.symbols[s],t.width>e&&(e=t.width),t.height>r&&(r=t.height);for(s=0,o=this.symbols.length;o>s;s++)t=this.symbols[s],t.shiftX(this.options.x+(e-t.width)/2+this.options["line-width"]),t.shiftY(this.options.y+(r-t.height)/2+this.options["line-width"]);for(this.start.render(),s=0,o=this.symbols.length;o>s;s++)t=this.symbols[s],t.renderLines();for(n=this.maxXFromLine,s=0,o=this.symbols.length;o>s;s++){t=this.symbols[s];var y=t.getX()+t.width,l=t.getY()+t.height;y>n&&(n=y),l>h&&(h=l)}for(s=0,o=this.lines.length;o>s;s++){i=this.lines[s].getBBox();var y=i.x,l=i.y,g=i.x2,f=i.y2;a>y&&(a=y),x>l&&(x=l),g>n&&(n=g),f>h&&(h=f)}var p=this.options.scale,c=this.options["line-width"];0>a&&(a-=c),0>x&&(x-=c);var u=n+c-a,d=h+c-x;this.paper.setSize(u*p,d*p),this.paper.setViewBox(a,x,u,d,!0)},r.prototype.clean=function(){if(this.paper){var t=this.paper.canvas;t.parentNode.removeChild(t)}},t.exports=r},function(t,i){t.exports={x:0,y:0,"line-width":3,"line-length":50,"text-margin":10,"font-size":14,"font-color":"black","line-color":"black","element-color":"black",fill:"white","yes-text":"yes","no-text":"no","arrow-end":"block","class":"flowchart",scale:1,symbols:{start:{},end:{},condition:{},inputoutput:{},operation:{},subroutine:{}}}},function(t,i){Array.prototype.indexOf||(Array.prototype.indexOf=function(t){"use strict";if(null===this)throw new TypeError;var i=Object(this),e=i.length>>>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);e>s;s++)if(s in i&&i[s]===t)return s;return-1}),Array.prototype.lastIndexOf||(Array.prototype.lastIndexOf=function(t){"use strict";if(null===this)throw new TypeError;var i=Object(this),e=i.length>>>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,n=r/2,a={x:o,y:n},x=[{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:n}],y=h(t,a,x);y.attr({stroke:this.getAttr("element-color"),"stroke-width":this.getAttr("line-width"),fill:this.getAttr("fill")}),i.link&&y.attr("href",i.link),i.target&&y.attr("target",i.target),i.key&&(y.node.id=i.key),y.node.setAttribute("class",this.getAttr("class")),this.text.attr({y:y.getBBox().height/2}),this.group.push(y),y.insertBefore(this.text),this.initialize()}var s=e(2),o=e(1).inherits,n=e(3),h=n.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"),n=this.getAttr("font-family"),h=this.getAttr("font-weight");o&&r.attr({font:o}),n&&r.attr({"font-family":n}),h&&r.attr({"font-weight":h}),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 4c281b5..57a0198 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 b1b7302e2e4d386ddc77","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.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_15__","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","next_direction","next","undefined","text","key","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","lineLength","rightPoint","isPositioned","self","shift","symb","hasSymbolUnder","len","diff","Math","abs","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","right","bottom","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","rightStart","topEnd","bottomStart","diffX","leftStart","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","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","getSymbol","s","startIndex","endIndex","getNextPath","flowSymb","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","sub","parts","join","txtAndState","pop","flowSymbols","lenS","realSymb","direction","condOpt","nextSymb","textMargin","yes_direction","no_direction","direction_yes","direction_no","max","startX","startY","yes_symbol","no_symbol","bottom_symbol","right_symbol","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","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","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","rect","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_15__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(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_15__) {\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 */ 8);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 14);\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\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 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\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 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 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.next_direction);\n\t } else {\n\t this.drawLineTo(this.next);\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 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,\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) {\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 }\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 }\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 }\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 */ 6);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 12);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 9);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 11);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 10);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 13);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\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 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 {\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 (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) {\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 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];\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],\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null\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\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 }\n\t\n\t }\n\t return chart;\n\t}\n\t\n\tmodule.exports = parse;\n\n\n/***/ },\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction Condition(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\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 {\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 {\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 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 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.chart.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 15);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 7);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\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 {\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 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 for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t var x = symbol.getX() + symbol.width;\n\t var 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 var x = line.x2;\n\t var y = line.y2;\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 var scale = this.options['scale'];\n\t var lineWidth = this.options['line-width'];\n\t this.paper.setSize((maxX * scale) + (lineWidth * scale), (maxY * scale) + (lineWidth * scale));\n\t this.paper.setViewBox(0, 0, maxX + lineWidth, maxY + lineWidth, 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/***/ },\n/* 7 */\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 }//,\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/***/ },\n/* 8 */\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/* 9 */\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/* 10 */\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/* 11 */\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/* 12 */\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/* 13 */\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/* 14 */\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/* 15 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** flowchart.min.js\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/** WEBPACK FOOTER **\n ** webpack/bootstrap b1b7302e2e4d386ddc77\n **/","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\n **/","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\n **/","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\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 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\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.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 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.next_direction);\n } else {\n this.drawLineTo(this.next);\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 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,\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) {\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 }\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 }\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\n **/","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 }\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\n **/","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');\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 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 {\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 (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) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\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];\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0],\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null\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\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 }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.parse.js\n ** module id = 4\n ** module chunks = 0\n **/","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 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 {\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 {\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 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 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\n **/","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\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 {\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 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 for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n var x = symbol.getX() + symbol.width;\n var 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 var x = line.x2;\n var y = line.y2;\n if (x > maxX) {\n maxX = x;\n }\n if (y > maxY) {\n maxY = y;\n }\n }\n\n var scale = this.options['scale'];\n var lineWidth = this.options['line-width'];\n this.paper.setSize((maxX * scale) + (lineWidth * scale), (maxY * scale) + (lineWidth * scale));\n this.paper.setViewBox(0, 0, maxX + lineWidth, maxY + lineWidth, 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/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.chart.js\n ** module id = 6\n ** module chunks = 0\n **/","// 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 }//,\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/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.defaults.js\n ** module id = 7\n ** module chunks = 0\n **/","// 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 = 8\n ** module chunks = 0\n **/","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 = 9\n ** module chunks = 0\n **/","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 = 10\n ** module chunks = 0\n **/","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 = 11\n ** module chunks = 0\n **/","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 = 12\n ** module chunks = 0\n **/","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 = 13\n ** module chunks = 0\n **/","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 = 14\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"Raphael\"\n ** module id = 15\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.min.js","webpack:///webpack/bootstrap 614f32ecc8b2aa5b1933","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.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_15__","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","next_direction","next","undefined","text","key","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","lineLength","rightPoint","isPositioned","self","shift","symb","hasSymbolUnder","len","diff","Math","abs","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","right","bottom","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","rightStart","topEnd","bottomStart","diffX","leftStart","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","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","getSymbol","s","startIndex","endIndex","getNextPath","flowSymb","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","sub","parts","join","txtAndState","pop","flowSymbols","lenS","realSymb","direction","condOpt","nextSymb","textMargin","yes_direction","no_direction","direction_yes","direction_no","max","startX","startY","yes_symbol","no_symbol","bottom_symbol","right_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","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","rect","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_15__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(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_15__) {\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 */ 8);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 14);\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\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 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\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 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 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.next_direction);\n\t } else {\n\t this.drawLineTo(this.next);\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 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) {\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 }\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 }\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 }\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 */ 6);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 12);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 9);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 11);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 10);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 13);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\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 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 {\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 (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) {\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 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];\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],\n\t symbolType: parts[1],\n\t text: null,\n\t link: null,\n\t target: null,\n\t flowstate: null\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\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 }\n\t\n\t }\n\t return chart;\n\t}\n\t\n\tmodule.exports = parse;\n\n\n/***/ },\n/* 5 */\n/*!*******************************************!*\\\n !*** ./src/flowchart.symbol.condition.js ***!\n \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction Condition(chart, options) {\n\t options = options || {};\n\t Symbol.call(this, chart, options);\n\t this.textMargin = this.getAttr('text-margin');\n\t this.yes_direction = 'bottom';\n\t this.no_direction = 'right';\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 {\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 {\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 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 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.chart.js ***!\n \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 15);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 7);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\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 {\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 for (i = 0, len = this.symbols.length; i < len; i++) {\n\t symbol = this.symbols[i];\n\t var x = symbol.getX() + symbol.width;\n\t var 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 var x = line.x;\n\t var 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 (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/***/ },\n/* 7 */\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 }//,\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/***/ },\n/* 8 */\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/* 9 */\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/* 10 */\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/* 11 */\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/* 12 */\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/* 13 */\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/* 14 */\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/* 15 */\n/*!**************************!*\\\n !*** external \"Raphael\" ***!\n \\**************************/\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** flowchart.min.js\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/** WEBPACK FOOTER **\n ** webpack/bootstrap 614f32ecc8b2aa5b1933\n **/","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\n **/","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\n **/","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\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 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\n this.next.setY(rightPoint.y - this.next.height/2);\n this.next.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 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.next_direction);\n } else {\n this.drawLineTo(this.next);\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 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) {\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 }\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 }\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\n **/","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 }\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\n **/","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');\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 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 {\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 (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) {\n lines[l - 1] += '\\n' + currentLine;\n lines.splice(l, 1);\n len--;\n } else {\n l++;\n }\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];\n\n if (line.indexOf('=>') >= 0) {\n // definition\n var parts = line.split('=>');\n var symbol = {\n key: parts[0],\n symbolType: parts[1],\n text: null,\n link: null,\n target: null,\n flowstate: null\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\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 }\n\n }\n return chart;\n}\n\nmodule.exports = parse;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.parse.js\n ** module id = 4\n ** module chunks = 0\n **/","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 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 {\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 {\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 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 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\n **/","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\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 {\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 for (i = 0, len = this.symbols.length; i < len; i++) {\n symbol = this.symbols[i];\n var x = symbol.getX() + symbol.width;\n var 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 var x = line.x;\n var 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 (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/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.chart.js\n ** module id = 6\n ** module chunks = 0\n **/","// 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 }//,\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/*****************\n ** WEBPACK FOOTER\n ** ./src/flowchart.defaults.js\n ** module id = 7\n ** module chunks = 0\n **/","// 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 = 8\n ** module chunks = 0\n **/","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 = 9\n ** module chunks = 0\n **/","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 = 10\n ** module chunks = 0\n **/","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 = 11\n ** module chunks = 0\n **/","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 = 12\n ** module chunks = 0\n **/","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 = 13\n ** module chunks = 0\n **/","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 = 14\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"Raphael\"\n ** module id = 15\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/releasenotes.md b/releasenotes.md index a5c5a2a..3f5dc08 100644 --- a/releasenotes.md +++ b/releasenotes.md @@ -1,3 +1,11 @@ +### v1.6.3 + +- Allow going to same symbol thanks to [nonylene](https://github.com/nonylene) [##83](https://github.com/adrai/flowchart.js/pull/#83) + +### v1.6.2 + +- Fixed not calculate viewBox and size properly thanks to [jackycute](https://github.com/jackycute) [##74](https://github.com/adrai/flowchart.js/issues/#74) + ### v1.6.1 - Fixed lines are not included in the calculation of viewBox and size thanks to [jackycute](https://github.com/jackycute) [##72](https://github.com/adrai/flowchart.js/issues/#72) [##67](https://github.com/adrai/flowchart.js/issues/#67) diff --git a/site b/site index 54411a8..1e6df1f 160000 --- a/site +++ b/site @@ -1 +1 @@ -Subproject commit 54411a8b03e7fd71e9e976a018bca0bb4381c887 +Subproject commit 1e6df1f3d59acd98a3b718bf415d174132f6a403 diff --git a/src/flowchart.chart.js b/src/flowchart.chart.js index bb9292f..ac321c0 100644 --- a/src/flowchart.chart.js +++ b/src/flowchart.chart.js @@ -60,6 +60,8 @@ FlowChart.prototype.render = function() { len = 0, maxX = 0, maxY = 0, + minX = 0, + minY = 0, symbol, line; @@ -103,23 +105,38 @@ FlowChart.prototype.render = function() { maxY = y; } } - + for (i = 0, len = this.lines.length; i < len; i++) { line = this.lines[i].getBBox(); - var x = line.x2; - var y = line.y2; - if (x > maxX) { - maxX = x; + var x = line.x; + var y = line.y; + var x2 = line.x2; + var y2 = line.y2; + if (x < minX) { + minX = x; } - if (y > maxY) { - maxY = y; + if (y < minY) { + minY = y; + } + if (x2 > maxX) { + maxX = x2; + } + if (y2 > maxY) { + maxY = y2; } } var scale = this.options['scale']; var lineWidth = this.options['line-width']; - this.paper.setSize((maxX * scale) + (lineWidth * scale), (maxY * scale) + (lineWidth * scale)); - this.paper.setViewBox(0, 0, maxX + lineWidth, maxY + lineWidth, true); + + if (minX < 0) minX -= lineWidth; + if (minY < 0) minY -= lineWidth; + + var width = maxX + lineWidth - minX; + var height = maxY + lineWidth - minY; + + this.paper.setSize(width * scale, height * scale); + this.paper.setViewBox(minX, minY, width, height, true); }; FlowChart.prototype.clean = function() { diff --git a/src/flowchart.symbol.js b/src/flowchart.symbol.js index fa03cdd..fd70d36 100644 --- a/src/flowchart.symbol.js +++ b/src/flowchart.symbol.js @@ -239,7 +239,7 @@ Symbol.prototype.drawLineTo = function(symbol, text, origin) { var isOnSameColumn = x === symbolX, isOnSameLine = y === symbolY, isUnder = y < symbolY, - isUpper = y > symbolY, + isUpper = y > symbolY || this === symbol, isLeft = x > symbolX, isRight = x < symbolX;