{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///flowchart.min.js","webpack:///webpack/bootstrap 90bf49022589e05021ab","webpack:///./index.js","webpack:///./src/flowchart.helpers.js","webpack:///./src/flowchart.symbol.js","webpack:///./src/flowchart.functions.js","webpack:///./src/flowchart.parse.js","webpack:///./src/flowchart.symbol.condition.js","webpack:///./src/flowchart.symbol.parallel.js","webpack:///./src/flowchart.chart.js","webpack:///./src/flowchart.defaults.js","webpack:///./src/flowchart.shim.js","webpack:///./src/flowchart.symbol.end.js","webpack:///./src/flowchart.symbol.inputoutput.js","webpack:///./src/flowchart.symbol.operation.js","webpack:///./src/flowchart.symbol.start.js","webpack:///./src/flowchart.symbol.subroutine.js","webpack:///./src/jquery-plugin.js","webpack:///external \"Raphael\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_16__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","parse","FlowChart","window","flowchart","_defaults","options","defaultOptions","merged","attrname","_inherits","ctor","superCtor","Object","super_","prototype","create","constructor","value","enumerable","writable","configurable","TempCtor","defaults","inherits","Symbol","chart","symbol","group","paper","set","connectedTo","symbolType","flowstate","lineStyle","key","next_direction","next","undefined","text","node","setAttribute","getAttr","attr","text-anchor","x","fill","font-size","font","fontF","fontW","font-family","font-weight","link","function","cursor","addEventListener","evt","target","maxWidth","words","split","tempText","ii","length","word","getBBox","width","substring","push","tmpMargin","stroke","stroke-width","height","insertBefore","y","initialize","drawAPI","drawLine","checkLineIntersection","attName","opt1","opt3","opt2","symbols","transform","getCenter","getX","getY","shiftX","setX","shiftY","setY","getTop","getBottom","getLeft","getRight","render","self","lineLength","rightPoint","isPositioned","shift","symb","hasSymbolUnder","len","diff","Math","abs","leftPoint","bottomPoint","renderLines","drawLineTo","origin","indexOf","line","right","bottom","top","left","symbolX","symbolY","symbolTop","symbolRight","symbolLeft","isOnSameColumn","isOnSameLine","isUnder","isUpper","isLeft","isRight","maxX","lineWith","rightStart","topEnd","bottomStart","diffX","leftStart","topStart","leftEnd","rightEnd","l","llen","lines","otherLine","ePath","lPath","iP","lenP","newPath","line1_from_x","line1_from_y","line1_to_x","line1_to_y","lP","lenlP","newLinePath","line2_from_x","line2_from_y","line2_to_x","line2_to_y","res","onLine1","onLine2","newSegment","splice","minXFromSymbols","maxXFromLine","drawPath","location","points","path","pathValues","from","to","toString","arrow-end","centerText","textPath","isHorizontal","firstTo","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","b","numerator1","numerator2","result","input","getStyle","s","startIndex","endIndex","getSymbValue","getSymbol","getNextPath","flowSymb","trim","start","drawSVG","container","getDisplaySymbol","dispSymbols","Start","diagram","End","Operation","InputOutput","Subroutine","Condition","Parallel","Error","clean","constructChart","prevDisp","prev","dispSymb","startWith","pathOk","yes","no","path1","path2","path3","then","prevBreak","i0","i0len","line0","replace","substr","currentLine","parts","params","match","entries","entry","sub","join","txtAndState","pop","flowSymbols","lenS","symbVal","realSymb","direction","condOpt","nextSymb","lineStyleSymbols","curSymb","JSON","textMargin","yes_direction","no_direction","direction_yes","direction_no","max","startX","startY","yes_symbol","no_symbol","bottom_symbol","right_symbol","rect","path1_direction","path2_direction","path3_direction","direction_next","direction_path1","direction_path2","direction_path3","path1_symbol","path2_symbol","path3_symbol","top_symbol","topPoint","left_symbol","Raphael","handle","flowChart","nextSymbol","maxHeight","maxY","minX","minY","x2","y2","scale","lineWidth","setSize","setViewBox","paperDom","canvas","parentNode","removeChild","line-width","line-length","text-margin","font-color","line-color","element-color","yes-text","no-text","class","end","condition","inputoutput","operation","subroutine","parallel","Array","searchElement","TypeError","t","n","arguments","Number","Infinity","floor","k","lastIndexOf","min","String","innerWrap","jQuery","$","fn","each","$this","html"],"mappings":"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","file":"flowchart.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_16__) {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Raphael\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Raphael\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"Raphael\")) : factory(root[\"Raphael\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_16__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!******************!*\\\n  !*** ./index.js ***!\n  \\******************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(/*! ./src/flowchart.shim */ 9);\n\tvar parse = __webpack_require__(/*! ./src/flowchart.parse */ 4);\n\t__webpack_require__(/*! ./src/jquery-plugin */ 15);\n\t\n\tvar FlowChart = {\n\t\tparse: parse\n\t};\n\t\n\tif (typeof window !== 'undefined') {\n\t\twindow.flowchart = FlowChart;\n\t}\n\t\n\tmodule.exports = FlowChart;\n\n\n/***/ }),\n/* 1 */\n/*!**********************************!*\\\n  !*** ./src/flowchart.helpers.js ***!\n  \\**********************************/\n/***/ (function(module, exports) {\n\n\tfunction _defaults(options, defaultOptions) {\n\t  if (!options || typeof options === 'function') {\n\t    return defaultOptions;\n\t  }\n\t\n\t  var merged = {};\n\t  for (var attrname in defaultOptions) {\n\t    merged[attrname] = defaultOptions[attrname];\n\t  }\n\t\n\t  for (attrname in options) {\n\t    if (options[attrname]) {\n\t      if (typeof merged[attrname] === 'object') {\n\t        merged[attrname] = _defaults(merged[attrname], options[attrname]);\n\t      } else {\n\t        merged[attrname] = options[attrname];\n\t      }\n\t    }\n\t  }\n\t  return merged;\n\t}\n\t\n\tfunction _inherits(ctor, superCtor) {\n\t  if (typeof(Object.create) === 'function') {\n\t    // implementation from standard node.js 'util' module\n\t    ctor.super_ = superCtor;\n\t    ctor.prototype = Object.create(superCtor.prototype, {\n\t      constructor: {\n\t        value: ctor,\n\t        enumerable: false,\n\t        writable: true,\n\t        configurable: true\n\t      }\n\t    });\n\t  } else {\n\t    // old school shim for old browsers\n\t    ctor.super_ = superCtor;\n\t    var TempCtor = function () {};\n\t    TempCtor.prototype = superCtor.prototype;\n\t    ctor.prototype = new TempCtor();\n\t    ctor.prototype.constructor = ctor;\n\t  }\n\t}\n\t\n\t// move dependent functions to a container so that\n\t// they can be overriden easier in no jquery environment (node.js)\n\tmodule.exports = {\n\t  defaults: _defaults,\n\t  inherits: _inherits\n\t};\n\n\n/***/ }),\n/* 2 */\n/*!*********************************!*\\\n  !*** ./src/flowchart.symbol.js ***!\n  \\*********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawLine = drawAPI.drawLine;\n\tvar checkLineIntersection = drawAPI.checkLineIntersection;\n\t\n\tfunction Symbol(chart, options, symbol) {\n\t  this.chart = chart;\n\t  this.group = this.chart.paper.set();\n\t  this.symbol = symbol;\n\t  this.connectedTo = [];\n\t  this.symbolType = options.symbolType;\n\t  this.flowstate = (options.flowstate || 'future');\n\t  this.lineStyle = (options.lineStyle || {});\n\t  this.key = (options.key || '');\n\t\n\t  this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\t\n\t  this.text = this.chart.paper.text(0, 0, options.text);\n\t  //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n\t  if (options.key) { this.text.node.id = options.key + 't'; }\n\t  this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\t\n\t  this.text.attr({\n\t    'text-anchor': 'start',\n\t    'x'          : this.getAttr('text-margin'),\n\t    'fill'       : this.getAttr('font-color'),\n\t    'font-size'  : this.getAttr('font-size')\n\t  });\n\t\n\t  var font  = this.getAttr('font');\n\t  var fontF = this.getAttr('font-family');\n\t  var fontW = this.getAttr('font-weight');\n\t\n\t  if (font) this.text.attr({ 'font': font });\n\t  if (fontF) this.text.attr({ 'font-family': fontF });\n\t  if (fontW) this.text.attr({ 'font-weight': fontW });\n\t\n\t  if (options.link) { this.text.attr('href', options.link); }\n\t  \n\t  //ndrqu Add click function with event and options params\n\t  if (options.function) { \n\t    this.text.attr({ 'cursor' : 'pointer' });\n\t\n\t    this.text.node.addEventListener(\"click\", function(evt) {\n\t        window[options.function](evt,options);\n\t    }, false);\n\t   }\n\t   \n\t  if (options.target) { this.text.attr('target', options.target); }\n\t\n\t  var maxWidth = this.getAttr('maxWidth');\n\t  if (maxWidth) {\n\t    // using this approach: http://stackoverflow.com/a/3153457/22466\n\t    var words = options.text.split(' ');\n\t    var tempText = \"\";\n\t    for (var i=0, ii=words.length; i<ii; i++) {\n\t      var word = words[i];\n\t      this.text.attr(\"text\", tempText + \" \" + word);\n\t      if (this.text.getBBox().width > maxWidth) {\n\t        tempText += \"\\n\" + word;\n\t      } else {\n\t        tempText += \" \" + word;\n\t      }\n\t    }\n\t    this.text.attr(\"text\", tempText.substring(1));\n\t  }\n\t\n\t  this.group.push(this.text);\n\t\n\t  if (symbol) {\n\t    var tmpMargin = this.getAttr('text-margin');\n\t\n\t    symbol.attr({\n\t      'fill' : this.getAttr('fill'),\n\t      'stroke' : this.getAttr('element-color'),\n\t      'stroke-width' : this.getAttr('line-width'),\n\t      'width' : this.text.getBBox().width + 2 * tmpMargin,\n\t      'height' : this.text.getBBox().height + 2 * tmpMargin\n\t    });\n\t\n\t    symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t    if (options.link) { symbol.attr('href', options.link); }\n\t    if (options.target) { symbol.attr('target', options.target); }\n\t\n\t    //ndrqu Add click function with event and options params\n\t    if (options.function) { \n\t        symbol.node.addEventListener(\"click\", function(evt) {\n\t          window[options.function](evt,options);\n\t        }, false);\n\t      symbol.attr({ 'cursor' : 'pointer' });\n\t    }\n\t    if (options.key) { symbol.node.id = options.key; }\n\t\n\t    this.group.push(symbol);\n\t    symbol.insertBefore(this.text);\n\t\n\t    this.text.attr({\n\t      'y': symbol.getBBox().height/2\n\t    });\n\t\n\t    this.initialize();\n\t  }\n\t\n\t}\n\t\n\t/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\n\tSymbol.prototype.getAttr = function(attName) {\n\t  if (!this.chart) {\n\t    return undefined;\n\t  }\n\t  var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n\t  var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n\t  var opt1;\n\t  if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n\t    opt1 = this.chart.options.flowstate[this.flowstate][attName];\n\t  }\n\t  return (opt1 || opt2 || opt3);\n\t};\n\t\n\tSymbol.prototype.initialize = function() {\n\t  this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\t\n\t  this.width = this.group.getBBox().width;\n\t  this.height = this.group.getBBox().height;\n\t};\n\t\n\tSymbol.prototype.getCenter = function() {\n\t  return {x: this.getX() + this.width/2,\n\t          y: this.getY() + this.height/2};\n\t};\n\t\n\tSymbol.prototype.getX = function() {\n\t  return this.group.getBBox().x;\n\t};\n\t\n\tSymbol.prototype.getY = function() {\n\t  return this.group.getBBox().y;\n\t};\n\t\n\tSymbol.prototype.shiftX = function(x) {\n\t  this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.setX = function(x) {\n\t  this.group.transform('t' + x + ',' + this.getY());\n\t};\n\t\n\tSymbol.prototype.shiftY = function(y) {\n\t  this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n\t};\n\t\n\tSymbol.prototype.setY = function(y) {\n\t  this.group.transform('t' + this.getX() + ',' + y);\n\t};\n\t\n\tSymbol.prototype.getTop = function() {\n\t  var y = this.getY();\n\t  var x = this.getX() + this.width/2;\n\t  return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getBottom = function() {\n\t  var y = this.getY() + this.height;\n\t  var x = this.getX() + this.width/2;\n\t  return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getLeft = function() {\n\t  var y = this.getY() + this.group.getBBox().height/2;\n\t  var x = this.getX();\n\t  return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.getRight = function() {\n\t  var y = this.getY() + this.group.getBBox().height/2;\n\t  var x = this.getX() + this.group.getBBox().width;\n\t  return {x: x, y: y};\n\t};\n\t\n\tSymbol.prototype.render = function() {\n\t  if (this.next) {\n\t\n\t    var self = this;\n\t    var lineLength = this.getAttr('line-length');\n\t\n\t    if (this.next_direction === 'right') {\n\t\n\t      var rightPoint = this.getRight();\n\t\n\t      if (!this.next.isPositioned) {\n\t        this.next.setY(rightPoint.y - this.next.height/2);\n\t        this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t        (function shift() {\n\t          var hasSymbolUnder = false;\n\t          var symb;\n\t          for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t            symb = self.chart.symbols[i];\n\t\n\t            var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t            if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t              hasSymbolUnder = true;\n\t              break;\n\t            }\n\t          }\n\t\n\t          if (hasSymbolUnder) {\n\t            if (self.next.symbolType === 'end') return;\n\t            self.next.setX(symb.getX() + symb.width + lineLength);\n\t            shift();\n\t          }\n\t        })();\n\t\n\t        this.next.isPositioned = true;\n\t\n\t        this.next.render();\n\t      }\n\t    } else if (this.next_direction === 'left') {\n\t\n\t      var leftPoint = this.getLeft();\n\t\n\t      if (!this.next.isPositioned) {\n\t        this.next.setY(leftPoint.y - this.next.height/2);\n\t        this.next.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t\n\t        (function shift() {\n\t          var hasSymbolUnder = false;\n\t          var symb;\n\t          for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t            symb = self.chart.symbols[i];\n\t\n\t            var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n\t            if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n\t              hasSymbolUnder = true;\n\t              break;\n\t            }\n\t          }\n\t\n\t          if (hasSymbolUnder) {\n\t            if (self.next.symbolType === 'end') return;\n\t            self.next.setX(symb.getX() + symb.width + lineLength);\n\t            shift();\n\t          }\n\t        })();\n\t\n\t        this.next.isPositioned = true;\n\t\n\t        this.next.render();\n\t      }\n\t    } else {\n\t      var bottomPoint = this.getBottom();\n\t\n\t      if (!this.next.isPositioned) {\n\t        this.next.shiftY(this.getY() + this.height + lineLength);\n\t        this.next.setX(bottomPoint.x - this.next.width/2);\n\t        this.next.isPositioned = true;\n\t\n\t        this.next.render();\n\t      }\n\t    }\n\t  }\n\t};\n\t\n\tSymbol.prototype.renderLines = function() {\n\t  if (this.next) {\n\t    if (this.next_direction) {\n\t      this.drawLineTo(this.next, this.getAttr('arrow-text') || '', this.next_direction);\n\t    } else {\n\t      this.drawLineTo(this.next, this.getAttr('arrow-text') || '');\n\t    }\n\t  }\n\t};\n\t\n\tSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n\t  if (this.connectedTo.indexOf(symbol) < 0) {\n\t    this.connectedTo.push(symbol);\n\t  }\n\t\n\t  var x = this.getCenter().x,\n\t      y = this.getCenter().y,\n\t      right = this.getRight(),\n\t      bottom = this.getBottom(),\n\t      top = this.getTop(),\n\t      left = this.getLeft();\n\t\n\t  var symbolX = symbol.getCenter().x,\n\t      symbolY = symbol.getCenter().y,\n\t      symbolTop = symbol.getTop(),\n\t      symbolRight = symbol.getRight(),\n\t      symbolLeft = symbol.getLeft();\n\t\n\t  var isOnSameColumn = x === symbolX,\n\t      isOnSameLine = y === symbolY,\n\t      isUnder = y < symbolY,\n\t      isUpper = y > symbolY || this === symbol,\n\t      isLeft = x > symbolX,\n\t      isRight = x < symbolX;\n\t\n\t  var maxX = 0,\n\t      line,\n\t      lineLength = this.getAttr('line-length'),\n\t      lineWith = this.getAttr('line-width');\n\t\n\t  if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n\t    line = drawLine(this.chart, bottom, symbolTop, text);\n\t    this.bottomStart = true;\n\t    symbol.topEnd = true;\n\t    maxX = bottom.x;\n\t  } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n\t    line = drawLine(this.chart, right, symbolLeft, text);\n\t    this.rightStart = true;\n\t    symbol.leftEnd = true;\n\t    maxX = symbolLeft.x;\n\t  } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n\t    line = drawLine(this.chart, left, symbolRight, text);\n\t    this.leftStart = true;\n\t    symbol.rightEnd = true;\n\t    maxX = symbolRight.x;\n\t  } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n\t    line = drawLine(this.chart, right, [\n\t      {x: right.x + lineLength/2, y: right.y},\n\t      {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t      {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t      {x: symbolTop.x, y: symbolTop.y}\n\t    ], text);\n\t    this.rightStart = true;\n\t    symbol.topEnd = true;\n\t    maxX = right.x + lineLength/2;\n\t  } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n\t    line = drawLine(this.chart, right, [\n\t      {x: right.x + lineLength/2, y: right.y},\n\t      {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t      {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t      {x: symbolTop.x, y: symbolTop.y}\n\t    ], text);\n\t    this.rightStart = true;\n\t    symbol.topEnd = true;\n\t    maxX = right.x + lineLength/2;\n\t  } else if ((!origin || origin === 'bottom') && isLeft) {\n\t    if (this.leftEnd && isUpper) {\n\t      line = drawLine(this.chart, bottom, [\n\t        {x: bottom.x, y: bottom.y + lineLength/2},\n\t        {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t        {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t        {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t        {x: symbolTop.x, y: symbolTop.y}\n\t      ], text);\n\t    } else {\n\t      line = drawLine(this.chart, bottom, [\n\t        {x: bottom.x, y: symbolTop.y - lineLength/2},\n\t        {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t        {x: symbolTop.x, y: symbolTop.y}\n\t      ], text);\n\t    }\n\t    this.bottomStart = true;\n\t    symbol.topEnd = true;\n\t    maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t  } else if ((!origin || origin === 'bottom') && isRight && isUnder) {\n\t    line = drawLine(this.chart, bottom, [\n\t      {x: bottom.x, y: symbolTop.y - lineLength/2},\n\t      {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t      {x: symbolTop.x, y: symbolTop.y}\n\t    ], text);\n\t    this.bottomStart = true;\n\t    symbol.topEnd = true;\n\t    maxX = bottom.x;\n\t    if (symbolTop.x > maxX) maxX = symbolTop.x;\n\t  } else if ((!origin || origin === 'bottom') && isRight) {\n\t    line = drawLine(this.chart, bottom, [\n\t      {x: bottom.x, y: bottom.y + lineLength/2},\n\t      {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n\t      {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t      {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t      {x: symbolTop.x, y: symbolTop.y}\n\t    ], text);\n\t    this.bottomStart = true;\n\t    symbol.topEnd = true;\n\t    maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n\t  } else if ((origin && origin === 'right') && isLeft) {\n\t    line = drawLine(this.chart, right, [\n\t      {x: right.x + lineLength/2, y: right.y},\n\t      {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t      {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t      {x: symbolTop.x, y: symbolTop.y}\n\t    ], text);\n\t    this.rightStart = true;\n\t    symbol.topEnd = true;\n\t    maxX = right.x + lineLength/2;\n\t  } else if ((origin && origin === 'right') && isRight) {\n\t    line = drawLine(this.chart, right, [\n\t      {x: symbolTop.x, y: right.y},\n\t      {x: symbolTop.x, y: symbolTop.y}\n\t    ], text);\n\t    this.rightStart = true;\n\t    symbol.topEnd = true;\n\t    maxX = right.x + lineLength/2;\n\t  } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n\t    line = drawLine(this.chart, bottom, [\n\t      {x: bottom.x, y: bottom.y + lineLength/2},\n\t      {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n\t      {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n\t      {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t      {x: symbolTop.x, y: symbolTop.y}\n\t    ], text);\n\t    this.bottomStart = true;\n\t    symbol.topEnd = true;\n\t    maxX = bottom.x + lineLength/2;\n\t  } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n\t    var diffX = left.x - lineLength/2;\n\t    if (symbolLeft.x < left.x) {\n\t      diffX = symbolLeft.x - lineLength/2;\n\t    }\n\t    line = drawLine(this.chart, left, [\n\t      {x: diffX, y: left.y},\n\t      {x: diffX, y: symbolTop.y - lineLength/2},\n\t      {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t      {x: symbolTop.x, y: symbolTop.y}\n\t    ], text);\n\t    this.leftStart = true;\n\t    symbol.topEnd = true;\n\t    maxX = left.x;\n\t  } else if ((origin === 'left')) {\n\t    line = drawLine(this.chart, left, [\n\t      {x: symbolTop.x + (left.x - symbolTop.x)/2, y: left.y},\n\t      {x: symbolTop.x + (left.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n\t      {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t      {x: symbolTop.x, y: symbolTop.y}\n\t    ], text);\n\t    this.leftStart = true;\n\t    symbol.topEnd = true;\n\t    maxX = left.x;\n\t  } else if ((origin === 'top')) {\n\t    line = drawLine(this.chart, top, [\n\t      {x: top.x, y: symbolTop.y - lineLength/2},\n\t      {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n\t      {x: symbolTop.x, y: symbolTop.y}\n\t    ], text);\n\t    this.topStart = true;\n\t    symbol.topEnd = true;\n\t    maxX = top.x;\n\t  }\n\t\n\t  //update line style\n\t  if (this.lineStyle[symbol.key] && line){\n\t    line.attr(this.lineStyle[symbol.key]);\n\t  }\n\t\n\t  if (line) {\n\t    for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n\t      var otherLine = this.chart.lines[l];\n\t      var len;\n\t\n\t      var ePath = otherLine.attr('path'),\n\t          lPath = line.attr('path');\n\t\n\t      for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n\t        var newPath = [];\n\t        newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n\t        newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\t\n\t        var line1_from_x = newPath[0][1];\n\t        var line1_from_y = newPath[0][2];\n\t        var line1_to_x = newPath[1][1];\n\t        var line1_to_y = newPath[1][2];\n\t\n\t        for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n\t          var newLinePath = [];\n\t          newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n\t          newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\t\n\t          var line2_from_x = newLinePath[0][1];\n\t          var line2_from_y = newLinePath[0][2];\n\t          var line2_to_x = newLinePath[1][1];\n\t          var line2_to_y = newLinePath[1][2];\n\t\n\t          var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n\t          if (res.onLine1 && res.onLine2) {\n\t\n\t            var newSegment;\n\t            if (line2_from_y === line2_to_y) {\n\t              if (line2_from_x > line2_to_x) {\n\t                newSegment = ['L', res.x + lineWith * 2,  line2_from_y];\n\t                lPath.splice(lP + 1, 0, newSegment);\n\t                newSegment = ['C', res.x + lineWith * 2,  line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n\t                lPath.splice(lP + 2, 0, newSegment);\n\t                line.attr('path', lPath);\n\t              } else {\n\t                newSegment = ['L', res.x - lineWith * 2,  line2_from_y];\n\t                lPath.splice(lP + 1, 0, newSegment);\n\t                newSegment = ['C', res.x - lineWith * 2,  line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n\t                lPath.splice(lP + 2, 0, newSegment);\n\t                line.attr('path', lPath);\n\t              }\n\t            } else {\n\t              if (line2_from_y > line2_to_y) {\n\t                newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n\t                lPath.splice(lP + 1, 0, newSegment);\n\t                newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n\t                lPath.splice(lP + 2, 0, newSegment);\n\t                line.attr('path', lPath);\n\t              } else {\n\t                newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n\t                lPath.splice(lP + 1, 0, newSegment);\n\t                newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n\t                lPath.splice(lP + 2, 0, newSegment);\n\t                line.attr('path', lPath);\n\t              }\n\t            }\n\t\n\t            lP += 2;\n\t            len += 2;\n\t          }\n\t        }\n\t      }\n\t    }\n\t\n\t    this.chart.lines.push(line);\n\t    if (this.chart.minXFromSymbols === undefined || this.chart.minXFromSymbols > left.x) {\n\t      this.chart.minXFromSymbols = left.x;\n\t    }\n\t  }\n\t\n\t  if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n\t    this.chart.maxXFromLine = maxX;\n\t  }\n\t};\n\t\n\tmodule.exports = Symbol;\n\n\n/***/ }),\n/* 3 */\n/*!************************************!*\\\n  !*** ./src/flowchart.functions.js ***!\n  \\************************************/\n/***/ (function(module, exports) {\n\n\tfunction drawPath(chart, location, points) {\n\t  var i, len;\n\t  var path = 'M{0},{1}';\n\t  for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n\t    path += ' L{' + i + '},{' + (i + 1) + '}';\n\t  }\n\t  var pathValues = [location.x, location.y];\n\t  for (i = 0, len = points.length; i < len; i++) {\n\t    pathValues.push(points[i].x);\n\t    pathValues.push(points[i].y);\n\t  }\n\t  var symbol = chart.paper.path(path, pathValues);\n\t  symbol.attr('stroke', chart.options['element-color']);\n\t  symbol.attr('stroke-width', chart.options['line-width']);\n\t\n\t  var font = chart.options.font;\n\t  var fontF = chart.options['font-family'];\n\t  var fontW = chart.options['font-weight'];\n\t\n\t  if (font) symbol.attr({ 'font': font });\n\t  if (fontF) symbol.attr({ 'font-family': fontF });\n\t  if (fontW) symbol.attr({ 'font-weight': fontW });\n\t\n\t  return symbol;\n\t}\n\t\n\tfunction drawLine(chart, from, to, text) {\n\t  var i, len;\n\t\n\t  if (Object.prototype.toString.call(to) !== '[object Array]') {\n\t    to = [to];\n\t  }\n\t\n\t  var path = 'M{0},{1}';\n\t  for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n\t    path += ' L{' + i + '},{' + (i + 1) + '}';\n\t  }\n\t  var pathValues = [from.x, from.y];\n\t  for (i = 0, len = to.length; i < len; i++) {\n\t    pathValues.push(to[i].x);\n\t    pathValues.push(to[i].y);\n\t  }\n\t\n\t  var line = chart.paper.path(path, pathValues);\n\t  line.attr({\n\t    stroke: chart.options['line-color'],\n\t    'stroke-width': chart.options['line-width'],\n\t    'arrow-end': chart.options['arrow-end']\n\t  });\n\t\n\t  var font = chart.options.font;\n\t  var fontF = chart.options['font-family'];\n\t  var fontW = chart.options['font-weight'];\n\t\n\t  if (font) line.attr({ 'font': font });\n\t  if (fontF) line.attr({ 'font-family': fontF });\n\t  if (fontW) line.attr({ 'font-weight': fontW });\n\t\n\t  if (text) {\n\t\n\t    var centerText = false;\n\t\n\t    var textPath = chart.paper.text(0, 0, text);\n\t\n\t    var isHorizontal = false;\n\t    var firstTo = to[0];\n\t\n\t    if (from.y === firstTo.y) {\n\t      isHorizontal = true;\n\t    }\n\t\n\t    var x = 0,\n\t        y = 0;\n\t\n\t    if (centerText) {\n\t      if (from.x > firstTo.x) {\n\t        x = from.x - (from.x - firstTo.x)/2;\n\t      } else {\n\t        x = firstTo.x - (firstTo.x - from.x)/2;\n\t      }\n\t\n\t      if (from.y > firstTo.y) {\n\t        y = from.y - (from.y - firstTo.y)/2;\n\t      } else {\n\t        y = firstTo.y - (firstTo.y - from.y)/2;\n\t      }\n\t\n\t      if (isHorizontal) {\n\t        x -= textPath.getBBox().width/2;\n\t        y -= chart.options['text-margin'];\n\t      } else {\n\t        x += chart.options['text-margin'];\n\t        y -= textPath.getBBox().height/2;\n\t      }\n\t    } else {\n\t      x = from.x;\n\t      y = from.y;\n\t\n\t      if (isHorizontal) {\n\t        x += chart.options['text-margin']/2;\n\t        y -= chart.options['text-margin'];\n\t      } else {\n\t        x += chart.options['text-margin']/2;\n\t        y += chart.options['text-margin'];\n\t        if (from.y > firstTo.y) {\n\t          y -= chart.options['text-margin']*2;\n\t        }\n\t      }\n\t    }\n\t\n\t    textPath.attr({\n\t      'text-anchor': 'start',\n\t      'font-size': chart.options['font-size'],\n\t      'fill': chart.options['font-color'],\n\t      x: x,\n\t      y: y\n\t    });\n\t\n\t    if (font) textPath.attr({ 'font': font });\n\t    if (fontF) textPath.attr({ 'font-family': fontF });\n\t    if (fontW) textPath.attr({ 'font-weight': fontW });\n\t  }\n\t\n\t  return line;\n\t}\n\t\n\tfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n\t  // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n\t  var denominator, a, b, numerator1, numerator2, result = {\n\t    x: null,\n\t    y: null,\n\t    onLine1: false,\n\t    onLine2: false\n\t  };\n\t  denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n\t  if (denominator === 0) {\n\t    return result;\n\t  }\n\t  a = line1StartY - line2StartY;\n\t  b = line1StartX - line2StartX;\n\t  numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n\t  numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n\t  a = numerator1 / denominator;\n\t  b = numerator2 / denominator;\n\t\n\t  // if we cast these lines infinitely in both directions, they intersect here:\n\t  result.x = line1StartX + (a * (line1EndX - line1StartX));\n\t  result.y = line1StartY + (a * (line1EndY - line1StartY));\n\t  /*\n\t  // it is worth noting that this should be the same as:\n\t  x = line2StartX + (b * (line2EndX - line2StartX));\n\t  y = line2StartX + (b * (line2EndY - line2StartY));\n\t  */\n\t  // if line1 is a segment and line2 is infinite, they intersect if:\n\t  if (a > 0 && a < 1) {\n\t    result.onLine1 = true;\n\t  }\n\t  // if line2 is a segment and line1 is infinite, they intersect if:\n\t  if (b > 0 && b < 1) {\n\t    result.onLine2 = true;\n\t  }\n\t  // if line1 and line2 are segments, they intersect if both of the above are true\n\t  return result;\n\t}\n\t\n\tmodule.exports = {\n\t\tdrawPath: drawPath,\n\t\tdrawLine: drawLine,\n\t\tcheckLineIntersection: checkLineIntersection\n\t};\n\n\n/***/ }),\n/* 4 */\n/*!********************************!*\\\n  !*** ./src/flowchart.parse.js ***!\n  \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar FlowChart = __webpack_require__(/*! ./flowchart.chart */ 7);\n\tvar Start = __webpack_require__(/*! ./flowchart.symbol.start */ 13);\n\tvar End = __webpack_require__(/*! ./flowchart.symbol.end */ 10);\n\tvar Operation = __webpack_require__(/*! ./flowchart.symbol.operation */ 12);\n\tvar InputOutput = __webpack_require__(/*! ./flowchart.symbol.inputoutput */ 11);\n\tvar Subroutine = __webpack_require__(/*! ./flowchart.symbol.subroutine */ 14);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\tvar Parallel = __webpack_require__(/*! ./flowchart.symbol.parallel */ 6);\n\t\n\tfunction parse(input) {\n\t  input = input || '';\n\t  input = input.trim();\n\t\n\t  var chart = {\n\t    symbols: {},\n\t    start: null,\n\t    drawSVG: function(container, options) {\n\t      var self = this;\n\t\n\t      if (this.diagram) {\n\t        this.diagram.clean();\n\t      }\n\t\n\t      var diagram = new FlowChart(container, options);\n\t      this.diagram = diagram;\n\t      var dispSymbols = {};\n\t\n\t      function getDisplaySymbol(s) {\n\t        if (dispSymbols[s.key]) {\n\t          return dispSymbols[s.key];\n\t        }\n\t\n\t        switch (s.symbolType) {\n\t          case 'start':\n\t            dispSymbols[s.key] = new Start(diagram, s);\n\t            break;\n\t          case 'end':\n\t            dispSymbols[s.key] = new End(diagram, s);\n\t            break;\n\t          case 'operation':\n\t            dispSymbols[s.key] = new Operation(diagram, s);\n\t            break;\n\t          case 'inputoutput':\n\t            dispSymbols[s.key] = new InputOutput(diagram, s);\n\t            break;\n\t          case 'subroutine':\n\t            dispSymbols[s.key] = new Subroutine(diagram, s);\n\t            break;\n\t          case 'condition':\n\t            dispSymbols[s.key] = new Condition(diagram, s);\n\t            break;\n\t          case 'parallel':\n\t            dispSymbols[s.key] = new Parallel(diagram, s);\n\t            break;\n\t          default:\n\t            return new Error('Wrong symbol type!');\n\t        }\n\t\n\t        return dispSymbols[s.key];\n\t      }\n\t\n\t      (function constructChart(s, prevDisp, prev) {\n\t        var dispSymb = getDisplaySymbol(s);\n\t\n\t        if (self.start === s) {\n\t          diagram.startWith(dispSymb);\n\t        } else if (prevDisp && prev && !prevDisp.pathOk) {\n\t          if (prevDisp instanceof(Condition)) {\n\t            if (prev.yes === s) {\n\t              prevDisp.yes(dispSymb);\n\t            }\n\t            if (prev.no === s) {\n\t              prevDisp.no(dispSymb);\n\t            }\n\t          } else if (prevDisp instanceof(Parallel)) {\n\t            if (prev.path1 === s) {\n\t              prevDisp.path1(dispSymb);\n\t            }\n\t            if (prev.path2 === s) {\n\t              prevDisp.path2(dispSymb);\n\t            }\n\t            if (prev.path3 === s) {\n\t              prevDisp.path3(dispSymb);\n\t            }\n\t          } else {\n\t            prevDisp.then(dispSymb);\n\t          }\n\t        }\n\t\n\t        if (dispSymb.pathOk) {\n\t          return dispSymb;\n\t        }\n\t\n\t        if (dispSymb instanceof(Condition)) {\n\t          if (s.yes) {\n\t            constructChart(s.yes, dispSymb, s);\n\t          }\n\t          if (s.no) {\n\t            constructChart(s.no, dispSymb, s);\n\t          }\n\t        } else if (dispSymb instanceof(Parallel)) {\n\t          if (s.path1) {\n\t            constructChart(s.path1, dispSymb, s);\n\t          }\n\t          if (s.path2) {\n\t            constructChart(s.path2, dispSymb, s);\n\t          }\n\t          if (s.path3) {\n\t            constructChart(s.path3, dispSymb, s);\n\t          }\n\t        } else if (s.next) {\n\t          constructChart(s.next, dispSymb, s);\n\t        }\n\t\n\t        return dispSymb;\n\t      })(this.start);\n\t\n\t      diagram.render();\n\t    },\n\t    clean: function() {\n\t      this.diagram.clean();\n\t    }\n\t  };\n\t\n\t  var lines = [];\n\t  var prevBreak = 0;\n\t  for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n\t    if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n\t      var line0 = input.substring(prevBreak, i0);\n\t      prevBreak = i0 + 1;\n\t      lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n\t    }\n\t  }\n\t\n\t  if (prevBreak < input.length) {\n\t    lines.push(input.substr(prevBreak));\n\t  }\n\t\n\t  for (var l = 1, len = lines.length; l < len;) {\n\t    var currentLine = lines[l];\n\t\n\t    if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n\t      lines[l - 1] += '\\n' + currentLine;\n\t      lines.splice(l, 1);\n\t      len--;\n\t    } else {\n\t      l++;\n\t    }\n\t  }\n\t\n\t  function getStyle(s){\n\t    var startIndex = s.indexOf('(') + 1;\n\t    var endIndex = s.indexOf(')');\n\t    if (startIndex >= 0 && endIndex >= 0) {\n\t      return s.substring(startIndex,endIndex);\n\t    }\n\t    return '{}';\n\t  }\n\t\n\t  function getSymbValue(s){\n\t    var startIndex = s.indexOf('(') + 1;\n\t    var endIndex = s.indexOf(')');\n\t    if (startIndex >= 0 && endIndex >= 0) {\n\t      return s.substring(startIndex,endIndex);\n\t    }\n\t    return '';\n\t  }\n\t\n\t  function getSymbol(s) {\n\t    var startIndex = s.indexOf('(') + 1;\n\t    var endIndex = s.indexOf(')');\n\t    if (startIndex >= 0 && endIndex >= 0) {\n\t      return chart.symbols[s.substring(0, startIndex - 1)];\n\t    }\n\t    return chart.symbols[s];\n\t  }\n\t\n\t  function getNextPath(s) {\n\t    var next = 'next';\n\t    var startIndex = s.indexOf('(') + 1;\n\t    var endIndex = s.indexOf(')');\n\t    if (startIndex >= 0 && endIndex >= 0) {\n\t      next = flowSymb.substring(startIndex, endIndex);\n\t      if (next.indexOf(',') < 0) {\n\t        if (next !== 'yes' && next !== 'no') {\n\t          next = 'next, ' + next;\n\t        }\n\t      }\n\t    }\n\t    return next;\n\t  }\n\t\n\t  while (lines.length > 0) {\n\t    var line = lines.splice(0, 1)[0].trim();\n\t\n\t    if (line.indexOf('=>') >= 0) {\n\t      // definition\n\t      var parts = line.split('=>');\n\t      var symbol = {\n\t        key: parts[0].replace(/\\(.*\\)/, ''),\n\t        symbolType: parts[1],\n\t        text: null,\n\t        link: null,\n\t        target: null,\n\t        flowstate: null,\n\t        function: null,\n\t        lineStyle: {},\n\t        params: {}\n\t      };\n\t\n\t      //parse parameters\n\t      var params = parts[0].match(/\\((.*)\\)/);\n\t      if (params && params.length > 1){\n\t        var entries = params[1].split(',');\n\t        for(var i = 0; i < entries.length; i++) {\n\t          var entry = entries[0].split('=');\n\t          if (entry.length == 2) {\n\t            symbol.params[entry[0]] = entry[1];\n\t          }\n\t        }\n\t      }\n\t\n\t      var sub;\n\t\n\t      if (symbol.symbolType.indexOf(': ') >= 0) {\n\t        sub = symbol.symbolType.split(': ');\n\t        symbol.symbolType = sub.shift();\n\t        symbol.text = sub.join(': ');\n\t      }\n\t\n\t      if (symbol.text && symbol.text.indexOf(':$') >= 0) {\n\t        sub = symbol.text.split(':$');\n\t        symbol.text = sub.shift();\n\t        symbol.function = sub.join(':$');\n\t      } else if (symbol.symbolType.indexOf(':$') >= 0) {\n\t        sub = symbol.symbolType.split(':$');\n\t        symbol.symbolType = sub.shift();\n\t        symbol.function = sub.join(':$');\n\t      } else if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n\t        sub = symbol.text.split(':>');\n\t        symbol.text = sub.shift();\n\t        symbol.link = sub.join(':>');\n\t      } else if (symbol.symbolType.indexOf(':>') >= 0) {\n\t        sub = symbol.symbolType.split(':>');\n\t        symbol.symbolType = sub.shift();\n\t        symbol.link = sub.join(':>');\n\t      }\n\t\n\t      if (symbol.symbolType.indexOf('\\n') >= 0) {\n\t        symbol.symbolType = symbol.symbolType.split('\\n')[0];\n\t      }\n\t\n\t      /* adding support for links */\n\t      if (symbol.link) {\n\t        var startIndex = symbol.link.indexOf('[') + 1;\n\t        var endIndex = symbol.link.indexOf(']');\n\t        if (startIndex >= 0 && endIndex >= 0) {\n\t          symbol.target = symbol.link.substring(startIndex, endIndex);\n\t          symbol.link = symbol.link.substring(0, startIndex - 1);\n\t        }\n\t      }\n\t      /* end of link support */\n\t\n\t      /* adding support for flowstates */\n\t      if (symbol.text) {\n\t        if (symbol.text.indexOf('|') >= 0) {\n\t          var txtAndState = symbol.text.split('|');\n\t          symbol.flowstate = txtAndState.pop().trim();\n\t          symbol.text = txtAndState.join('|');\n\t        }\n\t      }\n\t      /* end of flowstate support */\n\t\n\t      chart.symbols[symbol.key] = symbol;\n\t\n\t    } else if (line.indexOf('->') >= 0) {\n\t      // flow\n\t      var flowSymbols = line.split('->');\n\t      for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n\t        var flowSymb = flowSymbols[i];\n\t        var symbVal = getSymbValue(flowSymb);\n\t\n\t        if (symbVal === 'true' || symbVal === 'false') {\n\t          // map true or false to yes or no respectively\n\t          flowSymb = flowSymb.replace('true', 'yes');\n\t          flowSymb = flowSymb.replace('false', 'no');\n\t        }\n\t\n\t        var realSymb = getSymbol(flowSymb);\n\t        var next = getNextPath(flowSymb);\n\t\n\t        var direction = null;\n\t        if (next.indexOf(',') >= 0) {\n\t          var condOpt = next.split(',');\n\t          next = condOpt[0];\n\t          direction = condOpt[1].trim();\n\t        }\n\t\n\t        if (!chart.start) {\n\t          chart.start = realSymb;\n\t        }\n\t\n\t        if (i + 1 < lenS) {\n\t          var nextSymb = flowSymbols[i + 1];\n\t          realSymb[next] = getSymbol(nextSymb);\n\t          realSymb['direction_' + next] = direction;\n\t          direction = null;\n\t        }\n\t      }\n\t    } else if (line.indexOf('@>') >= 0) {\n\t\n\t      // line style\n\t      var lineStyleSymbols = line.split('@>');\n\t      for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n\t        if ((i + 1) != lenS) {\n\t          var curSymb = getSymbol(lineStyleSymbols[i]);\n\t          var nextSymb = getSymbol(lineStyleSymbols[i+1]);\n\t\n\t          curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i + 1]));\n\t        }\n\t      }\n\t    }\n\t\n\t  }\n\t  return chart;\n\t}\n\t\n\tmodule.exports = parse;\n\n/***/ }),\n/* 5 */\n/*!*******************************************!*\\\n  !*** ./src/flowchart.symbol.condition.js ***!\n  \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction Condition(chart, options) {\n\t  options = options || {};\n\t  Symbol.call(this, chart, options);\n\t  this.textMargin = this.getAttr('text-margin');\n\t  this.yes_direction = 'bottom';\n\t  this.no_direction = 'right';\n\t  this.params = options.params;\n\t  if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n\t    if (options.direction_yes === 'right') {\n\t      this.no_direction = 'bottom';\n\t      this.yes_direction = 'right';\n\t    } else if (options.direction_yes === 'top') {\n\t      this.no_direction = 'right';\n\t      this.yes_direction = 'top';\n\t    } else {\n\t      this.no_direction = 'right';\n\t      this.yes_direction = 'bottom';\n\t    }\n\t  } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n\t    if (options.direction_no === 'right') {\n\t      this.yes_direction = 'bottom';\n\t      this.no_direction = 'right';\n\t    } else {\n\t      this.yes_direction = 'right';\n\t      this.no_direction = 'bottom';\n\t    }\n\t  } else if (options.yes && options.direction_yes && options.no && options.direction_no && options.direction_no !== options.direction_yes) {\n\t    if (options.direction_yes === 'right') {\n\t      this.no_direction = 'bottom';\n\t      this.yes_direction = 'right';\n\t    } else if (options.direction_yes === 'top') {\n\t      this.no_direction = 'right';\n\t      this.yes_direction = 'top';\n\t    } else {\n\t      this.no_direction = 'right';\n\t      this.yes_direction = 'bottom';\n\t    }\n\t  } else {\n\t    this.yes_direction = 'bottom';\n\t    this.no_direction = 'right';\n\t  }\n\t\n\t  this.yes_direction = this.yes_direction || 'bottom';\n\t  this.no_direction = this.no_direction || 'right';\n\t\n\t  this.text.attr({\n\t    x: this.textMargin * 2\n\t  });\n\t\n\t  var width = this.text.getBBox().width + 3 * this.textMargin;\n\t  width += width/2;\n\t  var height = this.text.getBBox().height + 2 * this.textMargin;\n\t  height += height/2;\n\t  height = Math.max(width * 0.5, height);\n\t  var startX = width/4;\n\t  var startY = height/4;\n\t\n\t  this.text.attr({\n\t    x: startX + this.textMargin/2\n\t  });\n\t\n\t  var start = {x: startX, y: startY};\n\t  var points = [\n\t    {x: startX - width/4, y: startY + height/4},\n\t    {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n\t    {x: startX - width/4 + width, y: startY + height/4},\n\t    {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n\t    {x: startX - width/4, y: startY + height/4}\n\t  ];\n\t\n\t  var symbol = drawPath(chart, start, points);\n\t\n\t  symbol.attr({\n\t    stroke: this.getAttr('element-color'),\n\t    'stroke-width': this.getAttr('line-width'),\n\t    fill: this.getAttr('fill')\n\t  });\n\t  if (options.link) { symbol.attr('href', options.link); }\n\t  if (options.target) { symbol.attr('target', options.target); }\n\t  if (options.key) { symbol.node.id = options.key; }\n\t  symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t  this.text.attr({\n\t    y: symbol.getBBox().height/2\n\t  });\n\t\n\t  this.group.push(symbol);\n\t  symbol.insertBefore(this.text);\n\t\n\t  this.initialize();\n\t}\n\tinherits(Condition, Symbol);\n\t\n\tCondition.prototype.render = function() {\n\t\n\t  if (this.yes_direction) {\n\t    this[this.yes_direction + '_symbol'] = this.yes_symbol;\n\t  }\n\t\n\t  if (this.no_direction) {\n\t    this[this.no_direction + '_symbol'] = this.no_symbol;\n\t  }\n\t\n\t  var lineLength = this.getAttr('line-length');\n\t\n\t  if (this.bottom_symbol) {\n\t    var bottomPoint = this.getBottom();\n\t\n\t    if (!this.bottom_symbol.isPositioned) {\n\t      this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t      this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n\t      this.bottom_symbol.isPositioned = true;\n\t\n\t      this.bottom_symbol.render();\n\t    }\n\t  }\n\t\n\t  if (this.right_symbol) {\n\t    var rightPoint = this.getRight();\n\t\n\t    if (!this.right_symbol.isPositioned) {\n\t\n\t      this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n\t      this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t\n\t      var self = this;\n\t      (function shift() {\n\t        var hasSymbolUnder = false;\n\t        var symb;\n\t        for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t          symb = self.chart.symbols[i];\n\t\n\t          if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n\t            var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t            if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n\t              hasSymbolUnder = true;\n\t              break;\n\t            }\n\t          }\n\t        }\n\t\n\t        if (hasSymbolUnder) {\n\t          if (self.right_symbol.symbolType === 'end') return;\n\t          self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t          shift();\n\t        }\n\t      })();\n\t\n\t      this.right_symbol.isPositioned = true;\n\t\n\t      this.right_symbol.render();\n\t    }\n\t  }\n\t};\n\t\n\tCondition.prototype.renderLines = function() {\n\t  if (this.yes_symbol) {\n\t    this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n\t  }\n\t\n\t  if (this.no_symbol) {\n\t    this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n\t  }\n\t};\n\t\n\tmodule.exports = Condition;\n\n\n/***/ }),\n/* 6 */\n/*!******************************************!*\\\n  !*** ./src/flowchart.symbol.parallel.js ***!\n  \\******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Parallel(chart, options) {\n\t  var symbol = chart.paper.rect(0, 0, 0, 0);\n\t  options = options || {};\n\t  Symbol.call(this, chart, options, symbol);\n\t  this.textMargin = this.getAttr('text-margin');\n\t  this.path1_direction = 'bottom';\n\t  this.path2_direction = 'right';\n\t  this.path3_direction = 'top';\n\t  this.params = options.params;\n\t  if (options.direction_next === 'path1' && !options[options.direction_next] && options.next) {\n\t    options[options.direction_next] = options.next;\n\t  }\n\t  if (options.direction_next === 'path2' && !options[options.direction_next] && options.next) {\n\t    options[options.direction_next] = options.next;\n\t  }\n\t  if (options.direction_next === 'path3' && !options[options.direction_next] && options.next) {\n\t    options[options.direction_next] = options.next;\n\t  }\n\t\n\t  if (options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3) {\n\t    if (options.direction_path1 === 'right') {\n\t      this.path2_direction = 'bottom';\n\t      this.path1_direction = 'right';\n\t      this.path3_direction = 'top';\n\t    } else if (options.direction_path1 === 'top') {\n\t      this.path2_direction = 'right';\n\t      this.path1_direction = 'top';\n\t      this.path3_direction = 'bottom';\n\t    } else if (options.direction_path1 === 'left') {\n\t      this.path2_direction = 'right';\n\t      this.path1_direction = 'left';\n\t      this.path3_direction = 'bottom';\n\t    } else {\n\t      this.path2_direction = 'right';\n\t      this.path1_direction = 'bottom';\n\t      this.path3_direction = 'top';\n\t    }\n\t  } else if (options.path1 && !options.direction_path1 && options.path2 && options.direction_path2 && options.path3 && !options.direction_path3) {\n\t    if (options.direction_path2 === 'right') {\n\t      this.path1_direction = 'bottom';\n\t      this.path2_direction = 'right';\n\t      this.path3_direction = 'top';\n\t    } else if (options.direction_path2 === 'left') {\n\t      this.path1_direction = 'bottom';\n\t      this.path2_direction = 'left';\n\t      this.path3_direction = 'right';\n\t    } else {\n\t      this.path1_direction = 'right';\n\t      this.path2_direction = 'bottom';\n\t      this.path3_direction = 'top';\n\t    }\n\t  } else if (options.path1 && !options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && options.direction_path3) {\n\t    if (options.direction_path2 === 'right') {\n\t      this.path1_direction = 'bottom';\n\t      this.path2_direction = 'top';\n\t      this.path3_direction = 'right';\n\t    } else if (options.direction_path2 === 'left') {\n\t      this.path1_direction = 'bottom';\n\t      this.path2_direction = 'right';\n\t      this.path3_direction = 'left';\n\t    } else {\n\t      this.path1_direction = 'right';\n\t      this.path2_direction = 'bottom';\n\t      this.path3_direction = 'top';\n\t    }\n\t  } else {\n\t    this.path1_direction = options.direction_path1;\n\t    this.path2_direction = options.direction_path2;\n\t    this.path3_direction = options.direction_path3;\n\t  }\n\t\n\t  this.path1_direction = this.path1_direction || 'bottom';\n\t  this.path2_direction = this.path2_direction || 'right';\n\t  this.path3_direction = this.path3_direction || 'top';\n\t\n\t  this.initialize();\n\t}\n\tinherits(Parallel, Symbol);\n\t\n\tParallel.prototype.render = function() {\n\t\n\t  if (this.path1_direction) {\n\t    this[this.path1_direction + '_symbol'] = this.path1_symbol;\n\t  }\n\t\n\t  if (this.path2_direction) {\n\t    this[this.path2_direction + '_symbol'] = this.path2_symbol;\n\t  }\n\t\n\t  if (this.path3_direction) {\n\t    this[this.path3_direction + '_symbol'] = this.path3_symbol;\n\t  }\n\t\n\t  var lineLength = this.getAttr('line-length');\n\t\n\t  if (this.bottom_symbol) {\n\t    var bottomPoint = this.getBottom();\n\t\n\t    if (!this.bottom_symbol.isPositioned) {\n\t      this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n\t      this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2);\n\t      this.bottom_symbol.isPositioned = true;\n\t\n\t      this.bottom_symbol.render();\n\t    }\n\t  }\n\t\n\t  if (this.top_symbol) {\n\t    var topPoint = this.getTop();\n\t\n\t    if (!this.top_symbol.isPositioned) {\n\t      this.top_symbol.shiftY(this.getY() - this.top_symbol.height - lineLength);\n\t      this.top_symbol.setX(topPoint.x + this.top_symbol.width);\n\t      this.top_symbol.isPositioned = true;\n\t\n\t      this.top_symbol.render();\n\t    }\n\t  }\n\t\n\t  var self = this;\n\t\n\t  if (this.left_symbol) {\n\t    var leftPoint = this.getLeft();\n\t\n\t    if (!this.left_symbol.isPositioned) {\n\t      this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n\t      this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\t      (function shift() {\n\t        var hasSymbolUnder = false;\n\t        var symb;\n\t        for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t          symb = self.chart.symbols[i];\n\t\n\t          if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t            var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n\t            if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n\t              hasSymbolUnder = true;\n\t              break;\n\t            }\n\t          }\n\t        }\n\t\n\t        if (hasSymbolUnder) {\n\t          if (self.left_symbol.symbolType === 'end') return;\n\t          self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n\t          shift();\n\t        }\n\t      })();\n\t\n\t      this.left_symbol.isPositioned = true;\n\t\n\t      this.left_symbol.render();\n\t    }\n\t  }\n\t\n\t  if (this.right_symbol) {\n\t    var rightPoint = this.getRight();\n\t\n\t    if (!this.right_symbol.isPositioned) {\n\t      this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2);\n\t      this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\t      (function shift() {\n\t        var hasSymbolUnder = false;\n\t        var symb;\n\t        for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n\t          symb = self.chart.symbols[i];\n\t\n\t          if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n\t            var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n\t            if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n\t              hasSymbolUnder = true;\n\t              break;\n\t            }\n\t          }\n\t        }\n\t\n\t        if (hasSymbolUnder) {\n\t          if (self.right_symbol.symbolType === 'end') return;\n\t          self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n\t          shift();\n\t        }\n\t      })();\n\t\n\t      this.right_symbol.isPositioned = true;\n\t\n\t      this.right_symbol.render();\n\t    }\n\t  }\n\t};\n\t\n\tParallel.prototype.renderLines = function() {\n\t  if (this.path1_symbol) {\n\t    this.drawLineTo(this.path1_symbol, '', this.path1_direction);\n\t  }\n\t\n\t  if (this.path2_symbol) {\n\t    this.drawLineTo(this.path2_symbol, '', this.path2_direction);\n\t  }\n\t\n\t  if (this.path3_symbol) {\n\t    this.drawLineTo(this.path3_symbol, '', this.path3_direction);\n\t  }\n\t};\n\t\n\tmodule.exports = Parallel;\n\n/***/ }),\n/* 7 */\n/*!********************************!*\\\n  !*** ./src/flowchart.chart.js ***!\n  \\********************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Raphael = __webpack_require__(/*! raphael */ 16);\n\tvar defaults = __webpack_require__(/*! ./flowchart.helpers */ 1).defaults;\n\tvar defaultOptions = __webpack_require__(/*! ./flowchart.defaults */ 8);\n\tvar Condition = __webpack_require__(/*! ./flowchart.symbol.condition */ 5);\n\tvar Parallel = __webpack_require__(/*! ./flowchart.symbol.parallel */ 6);\n\t\n\tfunction FlowChart(container, options) {\n\t  options = options || {};\n\t\n\t  this.paper = new Raphael(container);\n\t\n\t  this.options = defaults(options, defaultOptions);\n\t\n\t  this.symbols = [];\n\t  this.lines = [];\n\t  this.start = null;\n\t}\n\t\n\tFlowChart.prototype.handle = function(symbol) {\n\t  if (this.symbols.indexOf(symbol) <= -1) {\n\t    this.symbols.push(symbol);\n\t  }\n\t\n\t  var flowChart = this;\n\t\n\t  if (symbol instanceof(Condition)) {\n\t    symbol.yes = function(nextSymbol) {\n\t      symbol.yes_symbol = nextSymbol;\n\t      if(symbol.no_symbol) {\n\t        symbol.pathOk = true;\n\t      }\n\t      return flowChart.handle(nextSymbol);\n\t    };\n\t    symbol.no = function(nextSymbol) {\n\t      symbol.no_symbol = nextSymbol;\n\t      if (symbol.yes_symbol) {\n\t        symbol.pathOk = true;\n\t      }\n\t      return flowChart.handle(nextSymbol);\n\t    };\n\t  } else if (symbol instanceof(Parallel)) {\n\t    symbol.path1 = function(nextSymbol) {\n\t      symbol.path1_symbol = nextSymbol;\n\t      if (symbol.path2_symbol) {\n\t        symbol.pathOk = true;\n\t      }\n\t      return flowChart.handle(nextSymbol);\n\t    };\n\t    symbol.path2 = function(nextSymbol) {\n\t      symbol.path2_symbol = nextSymbol;\n\t      if (symbol.path3_symbol) {\n\t        symbol.pathOk = true;\n\t      }\n\t      return flowChart.handle(nextSymbol);\n\t    };\n\t    symbol.path3 = function(nextSymbol) {\n\t      symbol.path3_symbol = nextSymbol;\n\t      if (symbol.path1_symbol) {\n\t        symbol.pathOk = true;\n\t      }\n\t      return flowChart.handle(nextSymbol);\n\t    };\n\t  } else {\n\t    symbol.then = function(nextSymbol) {\n\t      symbol.next = nextSymbol;\n\t      symbol.pathOk = true;\n\t      return flowChart.handle(nextSymbol);\n\t    };\n\t  }\n\t\n\t  return symbol;\n\t};\n\t\n\tFlowChart.prototype.startWith = function(symbol) {\n\t  this.start = symbol;\n\t  return this.handle(symbol);\n\t};\n\t\n\tFlowChart.prototype.render = function() {\n\t  var maxWidth = 0,\n\t    maxHeight = 0,\n\t    i = 0,\n\t    len = 0,\n\t    maxX = 0,\n\t    maxY = 0,\n\t    minX = 0,\n\t    minY = 0,\n\t    symbol,\n\t    line;\n\t\n\t  for (i = 0, len = this.symbols.length; i < len; i++) {\n\t    symbol = this.symbols[i];\n\t    if (symbol.width > maxWidth) {\n\t      maxWidth = symbol.width;\n\t    }\n\t    if (symbol.height > maxHeight) {\n\t      maxHeight = symbol.height;\n\t    }\n\t  }\n\t\n\t  for (i = 0, len = this.symbols.length; i < len; i++) {\n\t    symbol = this.symbols[i];\n\t    symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n\t    symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n\t  }\n\t\n\t  this.start.render();\n\t  // for (i = 0, len = this.symbols.length; i < len; i++) {\n\t  //   symbol = this.symbols[i];\n\t  //   symbol.render();\n\t  // }\n\t\n\t  for (i = 0, len = this.symbols.length; i < len; i++) {\n\t    symbol = this.symbols[i];\n\t    symbol.renderLines();\n\t  }\n\t\n\t  maxX = this.maxXFromLine;\n\t\n\t  var x;\n\t  var y;\n\t\n\t  for (i = 0, len = this.symbols.length; i < len; i++) {\n\t    symbol = this.symbols[i];\n\t    x = symbol.getX() + symbol.width;\n\t    y = symbol.getY() + symbol.height;\n\t    if (x > maxX) {\n\t      maxX = x;\n\t    }\n\t    if (y > maxY) {\n\t      maxY = y;\n\t    }\n\t  }\n\t\n\t  for (i = 0, len = this.lines.length; i < len; i++) {\n\t    line = this.lines[i].getBBox();\n\t    x = line.x;\n\t    y = line.y;\n\t    var x2 = line.x2;\n\t    var y2 = line.y2;\n\t    if (x < minX) {\n\t      minX = x;\n\t    }\n\t    if (y < minY) {\n\t      minY = y;\n\t    }\n\t    if (x2 > maxX) {\n\t      maxX = x2;\n\t    }\n\t    if (y2 > maxY) {\n\t      maxY = y2;\n\t    }\n\t  }\n\t\n\t  var scale = this.options['scale'];\n\t  var lineWidth = this.options['line-width'];\n\t\n\t  if (this.minXFromSymbols < minX) minX = this.minXFromSymbols;\n\t\n\t  if (minX < 0) minX -= lineWidth;\n\t  if (minY < 0) minY -= lineWidth;\n\t\n\t  var width = maxX + lineWidth - minX;\n\t  var height = maxY + lineWidth - minY;\n\t\n\t  this.paper.setSize(width * scale, height * scale);\n\t  this.paper.setViewBox(minX, minY, width, height, true);\n\t};\n\t\n\tFlowChart.prototype.clean = function() {\n\t  if (this.paper) {\n\t    var paperDom = this.paper.canvas;\n\t    paperDom.parentNode.removeChild(paperDom);\n\t  }\n\t};\n\t\n\tmodule.exports = FlowChart;\n\n/***/ }),\n/* 8 */\n/*!***********************************!*\\\n  !*** ./src/flowchart.defaults.js ***!\n  \\***********************************/\n/***/ (function(module, exports) {\n\n\t// defaults\n\tmodule.exports = {\n\t  'x': 0,\n\t  'y': 0,\n\t  'line-width': 3,\n\t  'line-length': 50,\n\t  'text-margin': 10,\n\t  'font-size': 14,\n\t  'font-color': 'black',\n\t  // 'font': 'normal',\n\t  // 'font-family': 'calibri',\n\t  // 'font-weight': 'normal',\n\t  'line-color': 'black',\n\t  'element-color': 'black',\n\t  'fill': 'white',\n\t  'yes-text': 'yes',\n\t  'no-text': 'no',\n\t  'arrow-end': 'block',\n\t  'class': 'flowchart',\n\t  'scale': 1,\n\t  'symbols': {\n\t    'start': {},\n\t    'end': {},\n\t    'condition': {},\n\t    'inputoutput': {},\n\t    'operation': {},\n\t    'subroutine': {},\n\t    'parallel': {}\n\t  } //,\n\t  // 'flowstate' : {\n\t  //   'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n\t  //   'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n\t  //   'future' : { 'fill': '#FFFF99'},\n\t  //   'invalid': {'fill': '#444444'}\n\t  // }\n\t};\n\n/***/ }),\n/* 9 */\n/*!*******************************!*\\\n  !*** ./src/flowchart.shim.js ***!\n  \\*******************************/\n/***/ (function(module, exports) {\n\n\t// add indexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.indexOf) {\n\t  Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n\t    \"use strict\";\n\t    if (this === null) {\n\t      throw new TypeError();\n\t    }\n\t    var t = Object(this);\n\t    var len = t.length >>> 0;\n\t    if (len === 0) {\n\t      return -1;\n\t    }\n\t    var n = 0;\n\t    if (arguments.length > 0) {\n\t      n = Number(arguments[1]);\n\t      if (n != n) { // shortcut for verifying if it's NaN\n\t        n = 0;\n\t      } else if (n !== 0 && n != Infinity && n != -Infinity) {\n\t        n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t      }\n\t    }\n\t    if (n >= len) {\n\t      return -1;\n\t    }\n\t    var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n\t    for (; k < len; k++) {\n\t      if (k in t && t[k] === searchElement) {\n\t        return k;\n\t      }\n\t    }\n\t    return -1;\n\t  };\n\t}\n\t\n\t// add lastIndexOf to non ECMA-262 standard compliant browsers\n\tif (!Array.prototype.lastIndexOf) {\n\t  Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n\t    \"use strict\";\n\t    if (this === null) {\n\t      throw new TypeError();\n\t    }\n\t    var t = Object(this);\n\t    var len = t.length >>> 0;\n\t    if (len === 0) {\n\t      return -1;\n\t    }\n\t    var n = len;\n\t    if (arguments.length > 1) {\n\t      n = Number(arguments[1]);\n\t      if (n != n) {\n\t        n = 0;\n\t      } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n\t        n = (n > 0 || -1) * Math.floor(Math.abs(n));\n\t      }\n\t    }\n\t    var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n\t    for (; k >= 0; k--) {\n\t      if (k in t && t[k] === searchElement) {\n\t        return k;\n\t      }\n\t    }\n\t    return -1;\n\t  };\n\t}\n\t\n\tif (!String.prototype.trim) {\n\t  String.prototype.trim = function() {\n\t    return this.replace(/^\\s+|\\s+$/g, '');\n\t  };\n\t}\n\n/***/ }),\n/* 10 */\n/*!*************************************!*\\\n  !*** ./src/flowchart.symbol.end.js ***!\n  \\*************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction End(chart, options) {\n\t  var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t  options = options || {};\n\t  options.text = options.text || 'End';\n\t  Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(End, Symbol);\n\t\n\tmodule.exports = End;\n\n\n/***/ }),\n/* 11 */\n/*!*********************************************!*\\\n  !*** ./src/flowchart.symbol.inputoutput.js ***!\n  \\*********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\tvar drawAPI = __webpack_require__(/*! ./flowchart.functions */ 3);\n\tvar drawPath = drawAPI.drawPath;\n\t\n\tfunction InputOutput(chart, options) {\n\t  options = options || {};\n\t  Symbol.call(this, chart, options);\n\t  this.textMargin = this.getAttr('text-margin');\n\t\n\t  this.text.attr({\n\t    x: this.textMargin * 3\n\t  });\n\t\n\t  var width = this.text.getBBox().width + 4 * this.textMargin;\n\t  var height = this.text.getBBox().height + 2 * this.textMargin;\n\t  var startX = this.textMargin;\n\t  var startY = height/2;\n\t\n\t  var start = {x: startX, y: startY};\n\t  var points = [\n\t    {x: startX - this.textMargin, y: height},\n\t    {x: startX - this.textMargin + width, y: height},\n\t    {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n\t    {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n\t    {x: startX, y: startY}\n\t  ];\n\t\n\t  var symbol = drawPath(chart, start, points);\n\t\n\t  symbol.attr({\n\t    stroke: this.getAttr('element-color'),\n\t    'stroke-width': this.getAttr('line-width'),\n\t    fill: this.getAttr('fill')\n\t  });\n\t  if (options.link) { symbol.attr('href', options.link); }\n\t  if (options.target) { symbol.attr('target', options.target); }\n\t  if (options.key) { symbol.node.id = options.key; }\n\t  symbol.node.setAttribute('class', this.getAttr('class'));\n\t\n\t  this.text.attr({\n\t    y: symbol.getBBox().height/2\n\t  });\n\t\n\t  this.group.push(symbol);\n\t  symbol.insertBefore(this.text);\n\t\n\t  this.initialize();\n\t}\n\tinherits(InputOutput, Symbol);\n\t\n\tInputOutput.prototype.getLeft = function() {\n\t  var y = this.getY() + this.group.getBBox().height/2;\n\t  var x = this.getX() + this.textMargin;\n\t  return {x: x, y: y};\n\t};\n\t\n\tInputOutput.prototype.getRight = function() {\n\t  var y = this.getY() + this.group.getBBox().height/2;\n\t  var x = this.getX() + this.group.getBBox().width - this.textMargin;\n\t  return {x: x, y: y};\n\t};\n\t\n\tmodule.exports = InputOutput;\n\n\n/***/ }),\n/* 12 */\n/*!*******************************************!*\\\n  !*** ./src/flowchart.symbol.operation.js ***!\n  \\*******************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Operation(chart, options) {\n\t  var symbol = chart.paper.rect(0, 0, 0, 0);\n\t  options = options || {};\n\t  Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Operation, Symbol);\n\t\n\tmodule.exports = Operation;\n\n\n/***/ }),\n/* 13 */\n/*!***************************************!*\\\n  !*** ./src/flowchart.symbol.start.js ***!\n  \\***************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Start(chart, options) {\n\t  var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n\t  options = options || {};\n\t  options.text = options.text || 'Start';\n\t  Symbol.call(this, chart, options, symbol);\n\t}\n\tinherits(Start, Symbol);\n\t\n\tmodule.exports = Start;\n\t\n\t// Start.prototype.render = function() {\n\t//   if (this.next) {\n\t//     var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\t\n\t//     var bottomPoint = this.getBottom();\n\t//     var topPoint = this.next.getTop();\n\t\n\t//     if (!this.next.isPositioned) {\n\t//       this.next.shiftY(this.getY() + this.height + lineLength);\n\t//       this.next.setX(bottomPoint.x - this.next.width/2);\n\t//       this.next.isPositioned = true;\n\t\n\t//       this.next.render();\n\t//     }\n\t//   }\n\t// };\n\t\n\t// Start.prototype.renderLines = function() {\n\t//   if (this.next) {\n\t//     this.drawLineTo(this.next);\n\t//   }\n\t// };\n\n\n/***/ }),\n/* 14 */\n/*!********************************************!*\\\n  !*** ./src/flowchart.symbol.subroutine.js ***!\n  \\********************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Symbol = __webpack_require__(/*! ./flowchart.symbol */ 2);\n\tvar inherits = __webpack_require__(/*! ./flowchart.helpers */ 1).inherits;\n\t\n\tfunction Subroutine(chart, options) {\n\t  var symbol = chart.paper.rect(0, 0, 0, 0);\n\t  options = options || {};\n\t  Symbol.call(this, chart, options, symbol);\n\t\n\t  symbol.attr({\n\t    width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n\t  });\n\t\n\t  this.text.attr({\n\t    'x': 2 * this.getAttr('text-margin')\n\t  });\n\t\n\t  var innerWrap = chart.paper.rect(0, 0, 0, 0);\n\t  innerWrap.attr({\n\t    x: this.getAttr('text-margin'),\n\t    stroke: this.getAttr('element-color'),\n\t    'stroke-width': this.getAttr('line-width'),\n\t    width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n\t    height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n\t    fill: this.getAttr('fill')\n\t  });\n\t  if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\t\n\t  var font = this.getAttr('font');\n\t  var fontF = this.getAttr('font-family');\n\t  var fontW = this.getAttr('font-weight');\n\t\n\t  if (font) innerWrap.attr({ 'font': font });\n\t  if (fontF) innerWrap.attr({ 'font-family': fontF });\n\t  if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\t\n\t  if (options.link) { innerWrap.attr('href', options.link); }\n\t  if (options.target) { innerWrap.attr('target', options.target); }\n\t  this.group.push(innerWrap);\n\t  innerWrap.insertBefore(this.text);\n\t\n\t  this.initialize();\n\t}\n\tinherits(Subroutine, Symbol);\n\t\n\tmodule.exports = Subroutine;\n\n\n/***/ }),\n/* 15 */\n/*!******************************!*\\\n  !*** ./src/jquery-plugin.js ***!\n  \\******************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n\tif (typeof jQuery != 'undefined') {\n\t\tvar parse = __webpack_require__(/*! ./flowchart.parse */ 4);\n\t\t(function( $ ) {\n\t\t\t$.fn.flowChart = function( options ) {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t\t$this.html('');\n\t\t\t\t\tchart.drawSVG(this, options);\n\t\t\t\t});\n\t\t\t};\n\t\t})(jQuery); // eslint-disable-line\n\t}\n\n\n/***/ }),\n/* 16 */\n/*!**************************!*\\\n  !*** external \"Raphael\" ***!\n  \\**************************/\n/***/ (function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// flowchart.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 90bf49022589e05021ab","require('./src/flowchart.shim');\nvar parse = require('./src/flowchart.parse');\nrequire('./src/jquery-plugin');\n\nvar FlowChart = {\n\tparse: parse\n};\n\nif (typeof window !== 'undefined') {\n\twindow.flowchart = FlowChart;\n}\n\nmodule.exports = FlowChart;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./index.js\n// module id = 0\n// module chunks = 0","function _defaults(options, defaultOptions) {\n  if (!options || typeof options === 'function') {\n    return defaultOptions;\n  }\n\n  var merged = {};\n  for (var attrname in defaultOptions) {\n    merged[attrname] = defaultOptions[attrname];\n  }\n\n  for (attrname in options) {\n    if (options[attrname]) {\n      if (typeof merged[attrname] === 'object') {\n        merged[attrname] = _defaults(merged[attrname], options[attrname]);\n      } else {\n        merged[attrname] = options[attrname];\n      }\n    }\n  }\n  return merged;\n}\n\nfunction _inherits(ctor, superCtor) {\n  if (typeof(Object.create) === 'function') {\n    // implementation from standard node.js 'util' module\n    ctor.super_ = superCtor;\n    ctor.prototype = Object.create(superCtor.prototype, {\n      constructor: {\n        value: ctor,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }\n    });\n  } else {\n    // old school shim for old browsers\n    ctor.super_ = superCtor;\n    var TempCtor = function () {};\n    TempCtor.prototype = superCtor.prototype;\n    ctor.prototype = new TempCtor();\n    ctor.prototype.constructor = ctor;\n  }\n}\n\n// move dependent functions to a container so that\n// they can be overriden easier in no jquery environment (node.js)\nmodule.exports = {\n  defaults: _defaults,\n  inherits: _inherits\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.helpers.js\n// module id = 1\n// module chunks = 0","var drawAPI = require('./flowchart.functions');\nvar drawLine = drawAPI.drawLine;\nvar checkLineIntersection = drawAPI.checkLineIntersection;\n\nfunction Symbol(chart, options, symbol) {\n  this.chart = chart;\n  this.group = this.chart.paper.set();\n  this.symbol = symbol;\n  this.connectedTo = [];\n  this.symbolType = options.symbolType;\n  this.flowstate = (options.flowstate || 'future');\n  this.lineStyle = (options.lineStyle || {});\n  this.key = (options.key || '');\n\n  this.next_direction = options.next && options['direction_next'] ? options['direction_next'] : undefined;\n\n  this.text = this.chart.paper.text(0, 0, options.text);\n  //Raphael does not support the svg group tag so setting the text node id to the symbol node id plus t\n  if (options.key) { this.text.node.id = options.key + 't'; }\n  this.text.node.setAttribute('class', this.getAttr('class') + 't');\n\n  this.text.attr({\n    'text-anchor': 'start',\n    'x'          : this.getAttr('text-margin'),\n    'fill'       : this.getAttr('font-color'),\n    'font-size'  : this.getAttr('font-size')\n  });\n\n  var font  = this.getAttr('font');\n  var fontF = this.getAttr('font-family');\n  var fontW = this.getAttr('font-weight');\n\n  if (font) this.text.attr({ 'font': font });\n  if (fontF) this.text.attr({ 'font-family': fontF });\n  if (fontW) this.text.attr({ 'font-weight': fontW });\n\n  if (options.link) { this.text.attr('href', options.link); }\n  \n  //ndrqu Add click function with event and options params\n  if (options.function) { \n    this.text.attr({ 'cursor' : 'pointer' });\n\n    this.text.node.addEventListener(\"click\", function(evt) {\n        window[options.function](evt,options);\n    }, false);\n   }\n   \n  if (options.target) { this.text.attr('target', options.target); }\n\n  var maxWidth = this.getAttr('maxWidth');\n  if (maxWidth) {\n    // using this approach: http://stackoverflow.com/a/3153457/22466\n    var words = options.text.split(' ');\n    var tempText = \"\";\n    for (var i=0, ii=words.length; i<ii; i++) {\n      var word = words[i];\n      this.text.attr(\"text\", tempText + \" \" + word);\n      if (this.text.getBBox().width > maxWidth) {\n        tempText += \"\\n\" + word;\n      } else {\n        tempText += \" \" + word;\n      }\n    }\n    this.text.attr(\"text\", tempText.substring(1));\n  }\n\n  this.group.push(this.text);\n\n  if (symbol) {\n    var tmpMargin = this.getAttr('text-margin');\n\n    symbol.attr({\n      'fill' : this.getAttr('fill'),\n      'stroke' : this.getAttr('element-color'),\n      'stroke-width' : this.getAttr('line-width'),\n      'width' : this.text.getBBox().width + 2 * tmpMargin,\n      'height' : this.text.getBBox().height + 2 * tmpMargin\n    });\n\n    symbol.node.setAttribute('class', this.getAttr('class'));\n\n    if (options.link) { symbol.attr('href', options.link); }\n    if (options.target) { symbol.attr('target', options.target); }\n\n    //ndrqu Add click function with event and options params\n    if (options.function) { \n        symbol.node.addEventListener(\"click\", function(evt) {\n          window[options.function](evt,options);\n        }, false);\n      symbol.attr({ 'cursor' : 'pointer' });\n    }\n    if (options.key) { symbol.node.id = options.key; }\n\n    this.group.push(symbol);\n    symbol.insertBefore(this.text);\n\n    this.text.attr({\n      'y': symbol.getBBox().height/2\n    });\n\n    this.initialize();\n  }\n\n}\n\n/* Gets the attribute based on Flowstate, Symbol-Name and default, first found wins */\nSymbol.prototype.getAttr = function(attName) {\n  if (!this.chart) {\n    return undefined;\n  }\n  var opt3 = (this.chart.options) ? this.chart.options[attName] : undefined;\n  var opt2 = (this.chart.options.symbols) ? this.chart.options.symbols[this.symbolType][attName] : undefined;\n  var opt1;\n  if (this.chart.options.flowstate && this.chart.options.flowstate[this.flowstate]) {\n    opt1 = this.chart.options.flowstate[this.flowstate][attName];\n  }\n  return (opt1 || opt2 || opt3);\n};\n\nSymbol.prototype.initialize = function() {\n  this.group.transform('t' + this.getAttr('line-width') + ',' + this.getAttr('line-width'));\n\n  this.width = this.group.getBBox().width;\n  this.height = this.group.getBBox().height;\n};\n\nSymbol.prototype.getCenter = function() {\n  return {x: this.getX() + this.width/2,\n          y: this.getY() + this.height/2};\n};\n\nSymbol.prototype.getX = function() {\n  return this.group.getBBox().x;\n};\n\nSymbol.prototype.getY = function() {\n  return this.group.getBBox().y;\n};\n\nSymbol.prototype.shiftX = function(x) {\n  this.group.transform('t' + (this.getX() + x) + ',' + this.getY());\n};\n\nSymbol.prototype.setX = function(x) {\n  this.group.transform('t' + x + ',' + this.getY());\n};\n\nSymbol.prototype.shiftY = function(y) {\n  this.group.transform('t' + this.getX() + ',' + (this.getY() + y));\n};\n\nSymbol.prototype.setY = function(y) {\n  this.group.transform('t' + this.getX() + ',' + y);\n};\n\nSymbol.prototype.getTop = function() {\n  var y = this.getY();\n  var x = this.getX() + this.width/2;\n  return {x: x, y: y};\n};\n\nSymbol.prototype.getBottom = function() {\n  var y = this.getY() + this.height;\n  var x = this.getX() + this.width/2;\n  return {x: x, y: y};\n};\n\nSymbol.prototype.getLeft = function() {\n  var y = this.getY() + this.group.getBBox().height/2;\n  var x = this.getX();\n  return {x: x, y: y};\n};\n\nSymbol.prototype.getRight = function() {\n  var y = this.getY() + this.group.getBBox().height/2;\n  var x = this.getX() + this.group.getBBox().width;\n  return {x: x, y: y};\n};\n\nSymbol.prototype.render = function() {\n  if (this.next) {\n\n    var self = this;\n    var lineLength = this.getAttr('line-length');\n\n    if (this.next_direction === 'right') {\n\n      var rightPoint = this.getRight();\n\n      if (!this.next.isPositioned) {\n        this.next.setY(rightPoint.y - this.next.height/2);\n        this.next.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n        (function shift() {\n          var hasSymbolUnder = false;\n          var symb;\n          for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n            symb = self.chart.symbols[i];\n\n            var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n            if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n              hasSymbolUnder = true;\n              break;\n            }\n          }\n\n          if (hasSymbolUnder) {\n            if (self.next.symbolType === 'end') return;\n            self.next.setX(symb.getX() + symb.width + lineLength);\n            shift();\n          }\n        })();\n\n        this.next.isPositioned = true;\n\n        this.next.render();\n      }\n    } else if (this.next_direction === 'left') {\n\n      var leftPoint = this.getLeft();\n\n      if (!this.next.isPositioned) {\n        this.next.setY(leftPoint.y - this.next.height/2);\n        this.next.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n\n        (function shift() {\n          var hasSymbolUnder = false;\n          var symb;\n          for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n            symb = self.chart.symbols[i];\n\n            var diff = Math.abs(symb.getCenter().x - self.next.getCenter().x);\n            if (symb.getCenter().y > self.next.getCenter().y && diff <= self.next.width/2) {\n              hasSymbolUnder = true;\n              break;\n            }\n          }\n\n          if (hasSymbolUnder) {\n            if (self.next.symbolType === 'end') return;\n            self.next.setX(symb.getX() + symb.width + lineLength);\n            shift();\n          }\n        })();\n\n        this.next.isPositioned = true;\n\n        this.next.render();\n      }\n    } else {\n      var bottomPoint = this.getBottom();\n\n      if (!this.next.isPositioned) {\n        this.next.shiftY(this.getY() + this.height + lineLength);\n        this.next.setX(bottomPoint.x - this.next.width/2);\n        this.next.isPositioned = true;\n\n        this.next.render();\n      }\n    }\n  }\n};\n\nSymbol.prototype.renderLines = function() {\n  if (this.next) {\n    if (this.next_direction) {\n      this.drawLineTo(this.next, this.getAttr('arrow-text') || '', this.next_direction);\n    } else {\n      this.drawLineTo(this.next, this.getAttr('arrow-text') || '');\n    }\n  }\n};\n\nSymbol.prototype.drawLineTo = function(symbol, text, origin) {\n  if (this.connectedTo.indexOf(symbol) < 0) {\n    this.connectedTo.push(symbol);\n  }\n\n  var x = this.getCenter().x,\n      y = this.getCenter().y,\n      right = this.getRight(),\n      bottom = this.getBottom(),\n      top = this.getTop(),\n      left = this.getLeft();\n\n  var symbolX = symbol.getCenter().x,\n      symbolY = symbol.getCenter().y,\n      symbolTop = symbol.getTop(),\n      symbolRight = symbol.getRight(),\n      symbolLeft = symbol.getLeft();\n\n  var isOnSameColumn = x === symbolX,\n      isOnSameLine = y === symbolY,\n      isUnder = y < symbolY,\n      isUpper = y > symbolY || this === symbol,\n      isLeft = x > symbolX,\n      isRight = x < symbolX;\n\n  var maxX = 0,\n      line,\n      lineLength = this.getAttr('line-length'),\n      lineWith = this.getAttr('line-width');\n\n  if ((!origin || origin === 'bottom') && isOnSameColumn && isUnder) {\n    line = drawLine(this.chart, bottom, symbolTop, text);\n    this.bottomStart = true;\n    symbol.topEnd = true;\n    maxX = bottom.x;\n  } else if ((!origin || origin === 'right') && isOnSameLine && isRight) {\n    line = drawLine(this.chart, right, symbolLeft, text);\n    this.rightStart = true;\n    symbol.leftEnd = true;\n    maxX = symbolLeft.x;\n  } else if ((!origin || origin === 'left') && isOnSameLine && isLeft) {\n    line = drawLine(this.chart, left, symbolRight, text);\n    this.leftStart = true;\n    symbol.rightEnd = true;\n    maxX = symbolRight.x;\n  } else if ((!origin || origin === 'right') && isOnSameColumn && isUpper) {\n    line = drawLine(this.chart, right, [\n      {x: right.x + lineLength/2, y: right.y},\n      {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n      {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n      {x: symbolTop.x, y: symbolTop.y}\n    ], text);\n    this.rightStart = true;\n    symbol.topEnd = true;\n    maxX = right.x + lineLength/2;\n  } else if ((!origin || origin === 'right') && isOnSameColumn && isUnder) {\n    line = drawLine(this.chart, right, [\n      {x: right.x + lineLength/2, y: right.y},\n      {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n      {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n      {x: symbolTop.x, y: symbolTop.y}\n    ], text);\n    this.rightStart = true;\n    symbol.topEnd = true;\n    maxX = right.x + lineLength/2;\n  } else if ((!origin || origin === 'bottom') && isLeft) {\n    if (this.leftEnd && isUpper) {\n      line = drawLine(this.chart, bottom, [\n        {x: bottom.x, y: bottom.y + lineLength/2},\n        {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n        {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n        {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n        {x: symbolTop.x, y: symbolTop.y}\n      ], text);\n    } else {\n      line = drawLine(this.chart, bottom, [\n        {x: bottom.x, y: symbolTop.y - lineLength/2},\n        {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n        {x: symbolTop.x, y: symbolTop.y}\n      ], text);\n    }\n    this.bottomStart = true;\n    symbol.topEnd = true;\n    maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n  } else if ((!origin || origin === 'bottom') && isRight && isUnder) {\n    line = drawLine(this.chart, bottom, [\n      {x: bottom.x, y: symbolTop.y - lineLength/2},\n      {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n      {x: symbolTop.x, y: symbolTop.y}\n    ], text);\n    this.bottomStart = true;\n    symbol.topEnd = true;\n    maxX = bottom.x;\n    if (symbolTop.x > maxX) maxX = symbolTop.x;\n  } else if ((!origin || origin === 'bottom') && isRight) {\n    line = drawLine(this.chart, bottom, [\n      {x: bottom.x, y: bottom.y + lineLength/2},\n      {x: bottom.x + (bottom.x - symbolTop.x)/2, y: bottom.y + lineLength/2},\n      {x: bottom.x + (bottom.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n      {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n      {x: symbolTop.x, y: symbolTop.y}\n    ], text);\n    this.bottomStart = true;\n    symbol.topEnd = true;\n    maxX = bottom.x + (bottom.x - symbolTop.x)/2;\n  } else if ((origin && origin === 'right') && isLeft) {\n    line = drawLine(this.chart, right, [\n      {x: right.x + lineLength/2, y: right.y},\n      {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n      {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n      {x: symbolTop.x, y: symbolTop.y}\n    ], text);\n    this.rightStart = true;\n    symbol.topEnd = true;\n    maxX = right.x + lineLength/2;\n  } else if ((origin && origin === 'right') && isRight) {\n    line = drawLine(this.chart, right, [\n      {x: symbolTop.x, y: right.y},\n      {x: symbolTop.x, y: symbolTop.y}\n    ], text);\n    this.rightStart = true;\n    symbol.topEnd = true;\n    maxX = right.x + lineLength/2;\n  } else if ((origin && origin === 'bottom') && isOnSameColumn && isUpper) {\n    line = drawLine(this.chart, bottom, [\n      {x: bottom.x, y: bottom.y + lineLength/2},\n      {x: right.x + lineLength/2, y: bottom.y + lineLength/2},\n      {x: right.x + lineLength/2, y: symbolTop.y - lineLength/2},\n      {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n      {x: symbolTop.x, y: symbolTop.y}\n    ], text);\n    this.bottomStart = true;\n    symbol.topEnd = true;\n    maxX = bottom.x + lineLength/2;\n  } else if ((origin === 'left') && isOnSameColumn && isUpper) {\n    var diffX = left.x - lineLength/2;\n    if (symbolLeft.x < left.x) {\n      diffX = symbolLeft.x - lineLength/2;\n    }\n    line = drawLine(this.chart, left, [\n      {x: diffX, y: left.y},\n      {x: diffX, y: symbolTop.y - lineLength/2},\n      {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n      {x: symbolTop.x, y: symbolTop.y}\n    ], text);\n    this.leftStart = true;\n    symbol.topEnd = true;\n    maxX = left.x;\n  } else if ((origin === 'left')) {\n    line = drawLine(this.chart, left, [\n      {x: symbolTop.x + (left.x - symbolTop.x)/2, y: left.y},\n      {x: symbolTop.x + (left.x - symbolTop.x)/2, y: symbolTop.y - lineLength/2},\n      {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n      {x: symbolTop.x, y: symbolTop.y}\n    ], text);\n    this.leftStart = true;\n    symbol.topEnd = true;\n    maxX = left.x;\n  } else if ((origin === 'top')) {\n    line = drawLine(this.chart, top, [\n      {x: top.x, y: symbolTop.y - lineLength/2},\n      {x: symbolTop.x, y: symbolTop.y - lineLength/2},\n      {x: symbolTop.x, y: symbolTop.y}\n    ], text);\n    this.topStart = true;\n    symbol.topEnd = true;\n    maxX = top.x;\n  }\n\n  //update line style\n  if (this.lineStyle[symbol.key] && line){\n    line.attr(this.lineStyle[symbol.key]);\n  }\n\n  if (line) {\n    for (var l = 0, llen = this.chart.lines.length; l < llen; l++) {\n      var otherLine = this.chart.lines[l];\n      var len;\n\n      var ePath = otherLine.attr('path'),\n          lPath = line.attr('path');\n\n      for (var iP = 0, lenP = ePath.length - 1; iP < lenP; iP++) {\n        var newPath = [];\n        newPath.push(['M', ePath[iP][1], ePath[iP][2]]);\n        newPath.push(['L', ePath[iP + 1][1], ePath[iP + 1][2]]);\n\n        var line1_from_x = newPath[0][1];\n        var line1_from_y = newPath[0][2];\n        var line1_to_x = newPath[1][1];\n        var line1_to_y = newPath[1][2];\n\n        for (var lP = 0, lenlP = lPath.length - 1; lP < lenlP; lP++) {\n          var newLinePath = [];\n          newLinePath.push(['M', lPath[lP][1], lPath[lP][2]]);\n          newLinePath.push(['L', lPath[lP + 1][1], lPath[lP + 1][2]]);\n\n          var line2_from_x = newLinePath[0][1];\n          var line2_from_y = newLinePath[0][2];\n          var line2_to_x = newLinePath[1][1];\n          var line2_to_y = newLinePath[1][2];\n\n          var res = checkLineIntersection(line1_from_x, line1_from_y, line1_to_x, line1_to_y, line2_from_x, line2_from_y, line2_to_x, line2_to_y);\n          if (res.onLine1 && res.onLine2) {\n\n            var newSegment;\n            if (line2_from_y === line2_to_y) {\n              if (line2_from_x > line2_to_x) {\n                newSegment = ['L', res.x + lineWith * 2,  line2_from_y];\n                lPath.splice(lP + 1, 0, newSegment);\n                newSegment = ['C', res.x + lineWith * 2,  line2_from_y, res.x, line2_from_y - lineWith * 4, res.x - lineWith * 2, line2_from_y];\n                lPath.splice(lP + 2, 0, newSegment);\n                line.attr('path', lPath);\n              } else {\n                newSegment = ['L', res.x - lineWith * 2,  line2_from_y];\n                lPath.splice(lP + 1, 0, newSegment);\n                newSegment = ['C', res.x - lineWith * 2,  line2_from_y, res.x, line2_from_y - lineWith * 4, res.x + lineWith * 2, line2_from_y];\n                lPath.splice(lP + 2, 0, newSegment);\n                line.attr('path', lPath);\n              }\n            } else {\n              if (line2_from_y > line2_to_y) {\n                newSegment = ['L', line2_from_x, res.y + lineWith * 2];\n                lPath.splice(lP + 1, 0, newSegment);\n                newSegment = ['C', line2_from_x, res.y + lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y - lineWith * 2];\n                lPath.splice(lP + 2, 0, newSegment);\n                line.attr('path', lPath);\n              } else {\n                newSegment = ['L', line2_from_x, res.y - lineWith * 2];\n                lPath.splice(lP + 1, 0, newSegment);\n                newSegment = ['C', line2_from_x, res.y - lineWith * 2, line2_from_x + lineWith * 4, res.y, line2_from_x, res.y + lineWith * 2];\n                lPath.splice(lP + 2, 0, newSegment);\n                line.attr('path', lPath);\n              }\n            }\n\n            lP += 2;\n            len += 2;\n          }\n        }\n      }\n    }\n\n    this.chart.lines.push(line);\n    if (this.chart.minXFromSymbols === undefined || this.chart.minXFromSymbols > left.x) {\n      this.chart.minXFromSymbols = left.x;\n    }\n  }\n\n  if (!this.chart.maxXFromLine || (this.chart.maxXFromLine && maxX > this.chart.maxXFromLine)) {\n    this.chart.maxXFromLine = maxX;\n  }\n};\n\nmodule.exports = Symbol;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.js\n// module id = 2\n// module chunks = 0","function drawPath(chart, location, points) {\n  var i, len;\n  var path = 'M{0},{1}';\n  for (i = 2, len = 2 * points.length + 2; i < len; i+=2) {\n    path += ' L{' + i + '},{' + (i + 1) + '}';\n  }\n  var pathValues = [location.x, location.y];\n  for (i = 0, len = points.length; i < len; i++) {\n    pathValues.push(points[i].x);\n    pathValues.push(points[i].y);\n  }\n  var symbol = chart.paper.path(path, pathValues);\n  symbol.attr('stroke', chart.options['element-color']);\n  symbol.attr('stroke-width', chart.options['line-width']);\n\n  var font = chart.options.font;\n  var fontF = chart.options['font-family'];\n  var fontW = chart.options['font-weight'];\n\n  if (font) symbol.attr({ 'font': font });\n  if (fontF) symbol.attr({ 'font-family': fontF });\n  if (fontW) symbol.attr({ 'font-weight': fontW });\n\n  return symbol;\n}\n\nfunction drawLine(chart, from, to, text) {\n  var i, len;\n\n  if (Object.prototype.toString.call(to) !== '[object Array]') {\n    to = [to];\n  }\n\n  var path = 'M{0},{1}';\n  for (i = 2, len = 2 * to.length + 2; i < len; i+=2) {\n    path += ' L{' + i + '},{' + (i + 1) + '}';\n  }\n  var pathValues = [from.x, from.y];\n  for (i = 0, len = to.length; i < len; i++) {\n    pathValues.push(to[i].x);\n    pathValues.push(to[i].y);\n  }\n\n  var line = chart.paper.path(path, pathValues);\n  line.attr({\n    stroke: chart.options['line-color'],\n    'stroke-width': chart.options['line-width'],\n    'arrow-end': chart.options['arrow-end']\n  });\n\n  var font = chart.options.font;\n  var fontF = chart.options['font-family'];\n  var fontW = chart.options['font-weight'];\n\n  if (font) line.attr({ 'font': font });\n  if (fontF) line.attr({ 'font-family': fontF });\n  if (fontW) line.attr({ 'font-weight': fontW });\n\n  if (text) {\n\n    var centerText = false;\n\n    var textPath = chart.paper.text(0, 0, text);\n\n    var isHorizontal = false;\n    var firstTo = to[0];\n\n    if (from.y === firstTo.y) {\n      isHorizontal = true;\n    }\n\n    var x = 0,\n        y = 0;\n\n    if (centerText) {\n      if (from.x > firstTo.x) {\n        x = from.x - (from.x - firstTo.x)/2;\n      } else {\n        x = firstTo.x - (firstTo.x - from.x)/2;\n      }\n\n      if (from.y > firstTo.y) {\n        y = from.y - (from.y - firstTo.y)/2;\n      } else {\n        y = firstTo.y - (firstTo.y - from.y)/2;\n      }\n\n      if (isHorizontal) {\n        x -= textPath.getBBox().width/2;\n        y -= chart.options['text-margin'];\n      } else {\n        x += chart.options['text-margin'];\n        y -= textPath.getBBox().height/2;\n      }\n    } else {\n      x = from.x;\n      y = from.y;\n\n      if (isHorizontal) {\n        x += chart.options['text-margin']/2;\n        y -= chart.options['text-margin'];\n      } else {\n        x += chart.options['text-margin']/2;\n        y += chart.options['text-margin'];\n        if (from.y > firstTo.y) {\n          y -= chart.options['text-margin']*2;\n        }\n      }\n    }\n\n    textPath.attr({\n      'text-anchor': 'start',\n      'font-size': chart.options['font-size'],\n      'fill': chart.options['font-color'],\n      x: x,\n      y: y\n    });\n\n    if (font) textPath.attr({ 'font': font });\n    if (fontF) textPath.attr({ 'font-family': fontF });\n    if (fontW) textPath.attr({ 'font-weight': fontW });\n  }\n\n  return line;\n}\n\nfunction checkLineIntersection(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n  // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n  var denominator, a, b, numerator1, numerator2, result = {\n    x: null,\n    y: null,\n    onLine1: false,\n    onLine2: false\n  };\n  denominator = ((line2EndY - line2StartY) * (line1EndX - line1StartX)) - ((line2EndX - line2StartX) * (line1EndY - line1StartY));\n  if (denominator === 0) {\n    return result;\n  }\n  a = line1StartY - line2StartY;\n  b = line1StartX - line2StartX;\n  numerator1 = ((line2EndX - line2StartX) * a) - ((line2EndY - line2StartY) * b);\n  numerator2 = ((line1EndX - line1StartX) * a) - ((line1EndY - line1StartY) * b);\n  a = numerator1 / denominator;\n  b = numerator2 / denominator;\n\n  // if we cast these lines infinitely in both directions, they intersect here:\n  result.x = line1StartX + (a * (line1EndX - line1StartX));\n  result.y = line1StartY + (a * (line1EndY - line1StartY));\n  /*\n  // it is worth noting that this should be the same as:\n  x = line2StartX + (b * (line2EndX - line2StartX));\n  y = line2StartX + (b * (line2EndY - line2StartY));\n  */\n  // if line1 is a segment and line2 is infinite, they intersect if:\n  if (a > 0 && a < 1) {\n    result.onLine1 = true;\n  }\n  // if line2 is a segment and line1 is infinite, they intersect if:\n  if (b > 0 && b < 1) {\n    result.onLine2 = true;\n  }\n  // if line1 and line2 are segments, they intersect if both of the above are true\n  return result;\n}\n\nmodule.exports = {\n\tdrawPath: drawPath,\n\tdrawLine: drawLine,\n\tcheckLineIntersection: checkLineIntersection\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.functions.js\n// module id = 3\n// module chunks = 0","var FlowChart = require('./flowchart.chart');\nvar Start = require('./flowchart.symbol.start');\nvar End = require('./flowchart.symbol.end');\nvar Operation = require('./flowchart.symbol.operation');\nvar InputOutput = require('./flowchart.symbol.inputoutput');\nvar Subroutine = require('./flowchart.symbol.subroutine');\nvar Condition = require('./flowchart.symbol.condition');\nvar Parallel = require('./flowchart.symbol.parallel');\n\nfunction parse(input) {\n  input = input || '';\n  input = input.trim();\n\n  var chart = {\n    symbols: {},\n    start: null,\n    drawSVG: function(container, options) {\n      var self = this;\n\n      if (this.diagram) {\n        this.diagram.clean();\n      }\n\n      var diagram = new FlowChart(container, options);\n      this.diagram = diagram;\n      var dispSymbols = {};\n\n      function getDisplaySymbol(s) {\n        if (dispSymbols[s.key]) {\n          return dispSymbols[s.key];\n        }\n\n        switch (s.symbolType) {\n          case 'start':\n            dispSymbols[s.key] = new Start(diagram, s);\n            break;\n          case 'end':\n            dispSymbols[s.key] = new End(diagram, s);\n            break;\n          case 'operation':\n            dispSymbols[s.key] = new Operation(diagram, s);\n            break;\n          case 'inputoutput':\n            dispSymbols[s.key] = new InputOutput(diagram, s);\n            break;\n          case 'subroutine':\n            dispSymbols[s.key] = new Subroutine(diagram, s);\n            break;\n          case 'condition':\n            dispSymbols[s.key] = new Condition(diagram, s);\n            break;\n          case 'parallel':\n            dispSymbols[s.key] = new Parallel(diagram, s);\n            break;\n          default:\n            return new Error('Wrong symbol type!');\n        }\n\n        return dispSymbols[s.key];\n      }\n\n      (function constructChart(s, prevDisp, prev) {\n        var dispSymb = getDisplaySymbol(s);\n\n        if (self.start === s) {\n          diagram.startWith(dispSymb);\n        } else if (prevDisp && prev && !prevDisp.pathOk) {\n          if (prevDisp instanceof(Condition)) {\n            if (prev.yes === s) {\n              prevDisp.yes(dispSymb);\n            }\n            if (prev.no === s) {\n              prevDisp.no(dispSymb);\n            }\n          } else if (prevDisp instanceof(Parallel)) {\n            if (prev.path1 === s) {\n              prevDisp.path1(dispSymb);\n            }\n            if (prev.path2 === s) {\n              prevDisp.path2(dispSymb);\n            }\n            if (prev.path3 === s) {\n              prevDisp.path3(dispSymb);\n            }\n          } else {\n            prevDisp.then(dispSymb);\n          }\n        }\n\n        if (dispSymb.pathOk) {\n          return dispSymb;\n        }\n\n        if (dispSymb instanceof(Condition)) {\n          if (s.yes) {\n            constructChart(s.yes, dispSymb, s);\n          }\n          if (s.no) {\n            constructChart(s.no, dispSymb, s);\n          }\n        } else if (dispSymb instanceof(Parallel)) {\n          if (s.path1) {\n            constructChart(s.path1, dispSymb, s);\n          }\n          if (s.path2) {\n            constructChart(s.path2, dispSymb, s);\n          }\n          if (s.path3) {\n            constructChart(s.path3, dispSymb, s);\n          }\n        } else if (s.next) {\n          constructChart(s.next, dispSymb, s);\n        }\n\n        return dispSymb;\n      })(this.start);\n\n      diagram.render();\n    },\n    clean: function() {\n      this.diagram.clean();\n    }\n  };\n\n  var lines = [];\n  var prevBreak = 0;\n  for (var i0 = 1, i0len = input.length; i0 < i0len; i0++) {\n    if(input[i0] === '\\n' && input[i0 - 1] !== '\\\\') {\n      var line0 = input.substring(prevBreak, i0);\n      prevBreak = i0 + 1;\n      lines.push(line0.replace(/\\\\\\n/g, '\\n'));\n    }\n  }\n\n  if (prevBreak < input.length) {\n    lines.push(input.substr(prevBreak));\n  }\n\n  for (var l = 1, len = lines.length; l < len;) {\n    var currentLine = lines[l];\n\n    if (currentLine.indexOf('->') < 0 && currentLine.indexOf('=>') < 0 && currentLine.indexOf('@>') < 0) {\n      lines[l - 1] += '\\n' + currentLine;\n      lines.splice(l, 1);\n      len--;\n    } else {\n      l++;\n    }\n  }\n\n  function getStyle(s){\n    var startIndex = s.indexOf('(') + 1;\n    var endIndex = s.indexOf(')');\n    if (startIndex >= 0 && endIndex >= 0) {\n      return s.substring(startIndex,endIndex);\n    }\n    return '{}';\n  }\n\n  function getSymbValue(s){\n    var startIndex = s.indexOf('(') + 1;\n    var endIndex = s.indexOf(')');\n    if (startIndex >= 0 && endIndex >= 0) {\n      return s.substring(startIndex,endIndex);\n    }\n    return '';\n  }\n\n  function getSymbol(s) {\n    var startIndex = s.indexOf('(') + 1;\n    var endIndex = s.indexOf(')');\n    if (startIndex >= 0 && endIndex >= 0) {\n      return chart.symbols[s.substring(0, startIndex - 1)];\n    }\n    return chart.symbols[s];\n  }\n\n  function getNextPath(s) {\n    var next = 'next';\n    var startIndex = s.indexOf('(') + 1;\n    var endIndex = s.indexOf(')');\n    if (startIndex >= 0 && endIndex >= 0) {\n      next = flowSymb.substring(startIndex, endIndex);\n      if (next.indexOf(',') < 0) {\n        if (next !== 'yes' && next !== 'no') {\n          next = 'next, ' + next;\n        }\n      }\n    }\n    return next;\n  }\n\n  while (lines.length > 0) {\n    var line = lines.splice(0, 1)[0].trim();\n\n    if (line.indexOf('=>') >= 0) {\n      // definition\n      var parts = line.split('=>');\n      var symbol = {\n        key: parts[0].replace(/\\(.*\\)/, ''),\n        symbolType: parts[1],\n        text: null,\n        link: null,\n        target: null,\n        flowstate: null,\n        function: null,\n        lineStyle: {},\n        params: {}\n      };\n\n      //parse parameters\n      var params = parts[0].match(/\\((.*)\\)/);\n      if (params && params.length > 1){\n        var entries = params[1].split(',');\n        for(var i = 0; i < entries.length; i++) {\n          var entry = entries[0].split('=');\n          if (entry.length == 2) {\n            symbol.params[entry[0]] = entry[1];\n          }\n        }\n      }\n\n      var sub;\n\n      if (symbol.symbolType.indexOf(': ') >= 0) {\n        sub = symbol.symbolType.split(': ');\n        symbol.symbolType = sub.shift();\n        symbol.text = sub.join(': ');\n      }\n\n      if (symbol.text && symbol.text.indexOf(':$') >= 0) {\n        sub = symbol.text.split(':$');\n        symbol.text = sub.shift();\n        symbol.function = sub.join(':$');\n      } else if (symbol.symbolType.indexOf(':$') >= 0) {\n        sub = symbol.symbolType.split(':$');\n        symbol.symbolType = sub.shift();\n        symbol.function = sub.join(':$');\n      } else if (symbol.text && symbol.text.indexOf(':>') >= 0) {\n        sub = symbol.text.split(':>');\n        symbol.text = sub.shift();\n        symbol.link = sub.join(':>');\n      } else if (symbol.symbolType.indexOf(':>') >= 0) {\n        sub = symbol.symbolType.split(':>');\n        symbol.symbolType = sub.shift();\n        symbol.link = sub.join(':>');\n      }\n\n      if (symbol.symbolType.indexOf('\\n') >= 0) {\n        symbol.symbolType = symbol.symbolType.split('\\n')[0];\n      }\n\n      /* adding support for links */\n      if (symbol.link) {\n        var startIndex = symbol.link.indexOf('[') + 1;\n        var endIndex = symbol.link.indexOf(']');\n        if (startIndex >= 0 && endIndex >= 0) {\n          symbol.target = symbol.link.substring(startIndex, endIndex);\n          symbol.link = symbol.link.substring(0, startIndex - 1);\n        }\n      }\n      /* end of link support */\n\n      /* adding support for flowstates */\n      if (symbol.text) {\n        if (symbol.text.indexOf('|') >= 0) {\n          var txtAndState = symbol.text.split('|');\n          symbol.flowstate = txtAndState.pop().trim();\n          symbol.text = txtAndState.join('|');\n        }\n      }\n      /* end of flowstate support */\n\n      chart.symbols[symbol.key] = symbol;\n\n    } else if (line.indexOf('->') >= 0) {\n      // flow\n      var flowSymbols = line.split('->');\n      for (var i = 0, lenS = flowSymbols.length; i < lenS; i++) {\n        var flowSymb = flowSymbols[i];\n        var symbVal = getSymbValue(flowSymb);\n\n        if (symbVal === 'true' || symbVal === 'false') {\n          // map true or false to yes or no respectively\n          flowSymb = flowSymb.replace('true', 'yes');\n          flowSymb = flowSymb.replace('false', 'no');\n        }\n\n        var realSymb = getSymbol(flowSymb);\n        var next = getNextPath(flowSymb);\n\n        var direction = null;\n        if (next.indexOf(',') >= 0) {\n          var condOpt = next.split(',');\n          next = condOpt[0];\n          direction = condOpt[1].trim();\n        }\n\n        if (!chart.start) {\n          chart.start = realSymb;\n        }\n\n        if (i + 1 < lenS) {\n          var nextSymb = flowSymbols[i + 1];\n          realSymb[next] = getSymbol(nextSymb);\n          realSymb['direction_' + next] = direction;\n          direction = null;\n        }\n      }\n    } else if (line.indexOf('@>') >= 0) {\n\n      // line style\n      var lineStyleSymbols = line.split('@>');\n      for (var i = 0, lenS = lineStyleSymbols.length; i < lenS; i++) {\n        if ((i + 1) != lenS) {\n          var curSymb = getSymbol(lineStyleSymbols[i]);\n          var nextSymb = getSymbol(lineStyleSymbols[i+1]);\n\n          curSymb['lineStyle'][nextSymb.key] = JSON.parse(getStyle(lineStyleSymbols[i + 1]));\n        }\n      }\n    }\n\n  }\n  return chart;\n}\n\nmodule.exports = parse;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.parse.js\n// module id = 4\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction Condition(chart, options) {\n  options = options || {};\n  Symbol.call(this, chart, options);\n  this.textMargin = this.getAttr('text-margin');\n  this.yes_direction = 'bottom';\n  this.no_direction = 'right';\n  this.params = options.params;\n  if (options.yes && options.direction_yes && options.no && !options.direction_no) {\n    if (options.direction_yes === 'right') {\n      this.no_direction = 'bottom';\n      this.yes_direction = 'right';\n    } else if (options.direction_yes === 'top') {\n      this.no_direction = 'right';\n      this.yes_direction = 'top';\n    } else {\n      this.no_direction = 'right';\n      this.yes_direction = 'bottom';\n    }\n  } else if (options.yes && !options.direction_yes && options.no && options.direction_no) {\n    if (options.direction_no === 'right') {\n      this.yes_direction = 'bottom';\n      this.no_direction = 'right';\n    } else {\n      this.yes_direction = 'right';\n      this.no_direction = 'bottom';\n    }\n  } else if (options.yes && options.direction_yes && options.no && options.direction_no && options.direction_no !== options.direction_yes) {\n    if (options.direction_yes === 'right') {\n      this.no_direction = 'bottom';\n      this.yes_direction = 'right';\n    } else if (options.direction_yes === 'top') {\n      this.no_direction = 'right';\n      this.yes_direction = 'top';\n    } else {\n      this.no_direction = 'right';\n      this.yes_direction = 'bottom';\n    }\n  } else {\n    this.yes_direction = 'bottom';\n    this.no_direction = 'right';\n  }\n\n  this.yes_direction = this.yes_direction || 'bottom';\n  this.no_direction = this.no_direction || 'right';\n\n  this.text.attr({\n    x: this.textMargin * 2\n  });\n\n  var width = this.text.getBBox().width + 3 * this.textMargin;\n  width += width/2;\n  var height = this.text.getBBox().height + 2 * this.textMargin;\n  height += height/2;\n  height = Math.max(width * 0.5, height);\n  var startX = width/4;\n  var startY = height/4;\n\n  this.text.attr({\n    x: startX + this.textMargin/2\n  });\n\n  var start = {x: startX, y: startY};\n  var points = [\n    {x: startX - width/4, y: startY + height/4},\n    {x: startX - width/4 + width/2, y: startY + height/4 + height/2},\n    {x: startX - width/4 + width, y: startY + height/4},\n    {x: startX - width/4 + width/2, y: startY + height/4 - height/2},\n    {x: startX - width/4, y: startY + height/4}\n  ];\n\n  var symbol = drawPath(chart, start, points);\n\n  symbol.attr({\n    stroke: this.getAttr('element-color'),\n    'stroke-width': this.getAttr('line-width'),\n    fill: this.getAttr('fill')\n  });\n  if (options.link) { symbol.attr('href', options.link); }\n  if (options.target) { symbol.attr('target', options.target); }\n  if (options.key) { symbol.node.id = options.key; }\n  symbol.node.setAttribute('class', this.getAttr('class'));\n\n  this.text.attr({\n    y: symbol.getBBox().height/2\n  });\n\n  this.group.push(symbol);\n  symbol.insertBefore(this.text);\n\n  this.initialize();\n}\ninherits(Condition, Symbol);\n\nCondition.prototype.render = function() {\n\n  if (this.yes_direction) {\n    this[this.yes_direction + '_symbol'] = this.yes_symbol;\n  }\n\n  if (this.no_direction) {\n    this[this.no_direction + '_symbol'] = this.no_symbol;\n  }\n\n  var lineLength = this.getAttr('line-length');\n\n  if (this.bottom_symbol) {\n    var bottomPoint = this.getBottom();\n\n    if (!this.bottom_symbol.isPositioned) {\n      this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n      this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width/2);\n      this.bottom_symbol.isPositioned = true;\n\n      this.bottom_symbol.render();\n    }\n  }\n\n  if (this.right_symbol) {\n    var rightPoint = this.getRight();\n\n    if (!this.right_symbol.isPositioned) {\n\n      this.right_symbol.setY(rightPoint.y - this.right_symbol.height/2);\n      this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n\n      var self = this;\n      (function shift() {\n        var hasSymbolUnder = false;\n        var symb;\n        for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n          symb = self.chart.symbols[i];\n\n          if (!self.params['align-next'] || self.params['align-next'] !== 'no') { \n            var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n            if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width/2) {\n              hasSymbolUnder = true;\n              break;\n            }\n          }\n        }\n\n        if (hasSymbolUnder) {\n          if (self.right_symbol.symbolType === 'end') return;\n          self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n          shift();\n        }\n      })();\n\n      this.right_symbol.isPositioned = true;\n\n      this.right_symbol.render();\n    }\n  }\n};\n\nCondition.prototype.renderLines = function() {\n  if (this.yes_symbol) {\n    this.drawLineTo(this.yes_symbol, this.getAttr('yes-text'), this.yes_direction);\n  }\n\n  if (this.no_symbol) {\n    this.drawLineTo(this.no_symbol, this.getAttr('no-text'), this.no_direction);\n  }\n};\n\nmodule.exports = Condition;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.condition.js\n// module id = 5\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Parallel(chart, options) {\n  var symbol = chart.paper.rect(0, 0, 0, 0);\n  options = options || {};\n  Symbol.call(this, chart, options, symbol);\n  this.textMargin = this.getAttr('text-margin');\n  this.path1_direction = 'bottom';\n  this.path2_direction = 'right';\n  this.path3_direction = 'top';\n  this.params = options.params;\n  if (options.direction_next === 'path1' && !options[options.direction_next] && options.next) {\n    options[options.direction_next] = options.next;\n  }\n  if (options.direction_next === 'path2' && !options[options.direction_next] && options.next) {\n    options[options.direction_next] = options.next;\n  }\n  if (options.direction_next === 'path3' && !options[options.direction_next] && options.next) {\n    options[options.direction_next] = options.next;\n  }\n\n  if (options.path1 && options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && !options.direction_path3) {\n    if (options.direction_path1 === 'right') {\n      this.path2_direction = 'bottom';\n      this.path1_direction = 'right';\n      this.path3_direction = 'top';\n    } else if (options.direction_path1 === 'top') {\n      this.path2_direction = 'right';\n      this.path1_direction = 'top';\n      this.path3_direction = 'bottom';\n    } else if (options.direction_path1 === 'left') {\n      this.path2_direction = 'right';\n      this.path1_direction = 'left';\n      this.path3_direction = 'bottom';\n    } else {\n      this.path2_direction = 'right';\n      this.path1_direction = 'bottom';\n      this.path3_direction = 'top';\n    }\n  } else if (options.path1 && !options.direction_path1 && options.path2 && options.direction_path2 && options.path3 && !options.direction_path3) {\n    if (options.direction_path2 === 'right') {\n      this.path1_direction = 'bottom';\n      this.path2_direction = 'right';\n      this.path3_direction = 'top';\n    } else if (options.direction_path2 === 'left') {\n      this.path1_direction = 'bottom';\n      this.path2_direction = 'left';\n      this.path3_direction = 'right';\n    } else {\n      this.path1_direction = 'right';\n      this.path2_direction = 'bottom';\n      this.path3_direction = 'top';\n    }\n  } else if (options.path1 && !options.direction_path1 && options.path2 && !options.direction_path2 && options.path3 && options.direction_path3) {\n    if (options.direction_path2 === 'right') {\n      this.path1_direction = 'bottom';\n      this.path2_direction = 'top';\n      this.path3_direction = 'right';\n    } else if (options.direction_path2 === 'left') {\n      this.path1_direction = 'bottom';\n      this.path2_direction = 'right';\n      this.path3_direction = 'left';\n    } else {\n      this.path1_direction = 'right';\n      this.path2_direction = 'bottom';\n      this.path3_direction = 'top';\n    }\n  } else {\n    this.path1_direction = options.direction_path1;\n    this.path2_direction = options.direction_path2;\n    this.path3_direction = options.direction_path3;\n  }\n\n  this.path1_direction = this.path1_direction || 'bottom';\n  this.path2_direction = this.path2_direction || 'right';\n  this.path3_direction = this.path3_direction || 'top';\n\n  this.initialize();\n}\ninherits(Parallel, Symbol);\n\nParallel.prototype.render = function() {\n\n  if (this.path1_direction) {\n    this[this.path1_direction + '_symbol'] = this.path1_symbol;\n  }\n\n  if (this.path2_direction) {\n    this[this.path2_direction + '_symbol'] = this.path2_symbol;\n  }\n\n  if (this.path3_direction) {\n    this[this.path3_direction + '_symbol'] = this.path3_symbol;\n  }\n\n  var lineLength = this.getAttr('line-length');\n\n  if (this.bottom_symbol) {\n    var bottomPoint = this.getBottom();\n\n    if (!this.bottom_symbol.isPositioned) {\n      this.bottom_symbol.shiftY(this.getY() + this.height + lineLength);\n      this.bottom_symbol.setX(bottomPoint.x - this.bottom_symbol.width / 2);\n      this.bottom_symbol.isPositioned = true;\n\n      this.bottom_symbol.render();\n    }\n  }\n\n  if (this.top_symbol) {\n    var topPoint = this.getTop();\n\n    if (!this.top_symbol.isPositioned) {\n      this.top_symbol.shiftY(this.getY() - this.top_symbol.height - lineLength);\n      this.top_symbol.setX(topPoint.x + this.top_symbol.width);\n      this.top_symbol.isPositioned = true;\n\n      this.top_symbol.render();\n    }\n  }\n\n  var self = this;\n\n  if (this.left_symbol) {\n    var leftPoint = this.getLeft();\n\n    if (!this.left_symbol.isPositioned) {\n      this.left_symbol.setY(leftPoint.y - this.left_symbol.height / 2);\n      this.left_symbol.shiftX(-(this.group.getBBox().x + this.width + lineLength));\n      (function shift() {\n        var hasSymbolUnder = false;\n        var symb;\n        for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n          symb = self.chart.symbols[i];\n\n          if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n            var diff = Math.abs(symb.getCenter().x - self.left_symbol.getCenter().x);\n            if (symb.getCenter().y > self.left_symbol.getCenter().y && diff <= self.left_symbol.width / 2) {\n              hasSymbolUnder = true;\n              break;\n            }\n          }\n        }\n\n        if (hasSymbolUnder) {\n          if (self.left_symbol.symbolType === 'end') return;\n          self.left_symbol.setX(symb.getX() + symb.width + lineLength);\n          shift();\n        }\n      })();\n\n      this.left_symbol.isPositioned = true;\n\n      this.left_symbol.render();\n    }\n  }\n\n  if (this.right_symbol) {\n    var rightPoint = this.getRight();\n\n    if (!this.right_symbol.isPositioned) {\n      this.right_symbol.setY(rightPoint.y - this.right_symbol.height / 2);\n      this.right_symbol.shiftX(this.group.getBBox().x + this.width + lineLength);\n      (function shift() {\n        var hasSymbolUnder = false;\n        var symb;\n        for (var i = 0, len = self.chart.symbols.length; i < len; i++) {\n          symb = self.chart.symbols[i];\n\n          if (!self.params['align-next'] || self.params['align-next'] !== 'no') {\n            var diff = Math.abs(symb.getCenter().x - self.right_symbol.getCenter().x);\n            if (symb.getCenter().y > self.right_symbol.getCenter().y && diff <= self.right_symbol.width / 2) {\n              hasSymbolUnder = true;\n              break;\n            }\n          }\n        }\n\n        if (hasSymbolUnder) {\n          if (self.right_symbol.symbolType === 'end') return;\n          self.right_symbol.setX(symb.getX() + symb.width + lineLength);\n          shift();\n        }\n      })();\n\n      this.right_symbol.isPositioned = true;\n\n      this.right_symbol.render();\n    }\n  }\n};\n\nParallel.prototype.renderLines = function() {\n  if (this.path1_symbol) {\n    this.drawLineTo(this.path1_symbol, '', this.path1_direction);\n  }\n\n  if (this.path2_symbol) {\n    this.drawLineTo(this.path2_symbol, '', this.path2_direction);\n  }\n\n  if (this.path3_symbol) {\n    this.drawLineTo(this.path3_symbol, '', this.path3_direction);\n  }\n};\n\nmodule.exports = Parallel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.parallel.js\n// module id = 6\n// module chunks = 0","var Raphael = require('raphael');\nvar defaults = require('./flowchart.helpers').defaults;\nvar defaultOptions = require('./flowchart.defaults');\nvar Condition = require('./flowchart.symbol.condition');\nvar Parallel = require('./flowchart.symbol.parallel');\n\nfunction FlowChart(container, options) {\n  options = options || {};\n\n  this.paper = new Raphael(container);\n\n  this.options = defaults(options, defaultOptions);\n\n  this.symbols = [];\n  this.lines = [];\n  this.start = null;\n}\n\nFlowChart.prototype.handle = function(symbol) {\n  if (this.symbols.indexOf(symbol) <= -1) {\n    this.symbols.push(symbol);\n  }\n\n  var flowChart = this;\n\n  if (symbol instanceof(Condition)) {\n    symbol.yes = function(nextSymbol) {\n      symbol.yes_symbol = nextSymbol;\n      if(symbol.no_symbol) {\n        symbol.pathOk = true;\n      }\n      return flowChart.handle(nextSymbol);\n    };\n    symbol.no = function(nextSymbol) {\n      symbol.no_symbol = nextSymbol;\n      if (symbol.yes_symbol) {\n        symbol.pathOk = true;\n      }\n      return flowChart.handle(nextSymbol);\n    };\n  } else if (symbol instanceof(Parallel)) {\n    symbol.path1 = function(nextSymbol) {\n      symbol.path1_symbol = nextSymbol;\n      if (symbol.path2_symbol) {\n        symbol.pathOk = true;\n      }\n      return flowChart.handle(nextSymbol);\n    };\n    symbol.path2 = function(nextSymbol) {\n      symbol.path2_symbol = nextSymbol;\n      if (symbol.path3_symbol) {\n        symbol.pathOk = true;\n      }\n      return flowChart.handle(nextSymbol);\n    };\n    symbol.path3 = function(nextSymbol) {\n      symbol.path3_symbol = nextSymbol;\n      if (symbol.path1_symbol) {\n        symbol.pathOk = true;\n      }\n      return flowChart.handle(nextSymbol);\n    };\n  } else {\n    symbol.then = function(nextSymbol) {\n      symbol.next = nextSymbol;\n      symbol.pathOk = true;\n      return flowChart.handle(nextSymbol);\n    };\n  }\n\n  return symbol;\n};\n\nFlowChart.prototype.startWith = function(symbol) {\n  this.start = symbol;\n  return this.handle(symbol);\n};\n\nFlowChart.prototype.render = function() {\n  var maxWidth = 0,\n    maxHeight = 0,\n    i = 0,\n    len = 0,\n    maxX = 0,\n    maxY = 0,\n    minX = 0,\n    minY = 0,\n    symbol,\n    line;\n\n  for (i = 0, len = this.symbols.length; i < len; i++) {\n    symbol = this.symbols[i];\n    if (symbol.width > maxWidth) {\n      maxWidth = symbol.width;\n    }\n    if (symbol.height > maxHeight) {\n      maxHeight = symbol.height;\n    }\n  }\n\n  for (i = 0, len = this.symbols.length; i < len; i++) {\n    symbol = this.symbols[i];\n    symbol.shiftX(this.options.x + (maxWidth - symbol.width)/2 + this.options['line-width']);\n    symbol.shiftY(this.options.y + (maxHeight - symbol.height)/2 + this.options['line-width']);\n  }\n\n  this.start.render();\n  // for (i = 0, len = this.symbols.length; i < len; i++) {\n  //   symbol = this.symbols[i];\n  //   symbol.render();\n  // }\n\n  for (i = 0, len = this.symbols.length; i < len; i++) {\n    symbol = this.symbols[i];\n    symbol.renderLines();\n  }\n\n  maxX = this.maxXFromLine;\n\n  var x;\n  var y;\n\n  for (i = 0, len = this.symbols.length; i < len; i++) {\n    symbol = this.symbols[i];\n    x = symbol.getX() + symbol.width;\n    y = symbol.getY() + symbol.height;\n    if (x > maxX) {\n      maxX = x;\n    }\n    if (y > maxY) {\n      maxY = y;\n    }\n  }\n\n  for (i = 0, len = this.lines.length; i < len; i++) {\n    line = this.lines[i].getBBox();\n    x = line.x;\n    y = line.y;\n    var x2 = line.x2;\n    var y2 = line.y2;\n    if (x < minX) {\n      minX = x;\n    }\n    if (y < minY) {\n      minY = y;\n    }\n    if (x2 > maxX) {\n      maxX = x2;\n    }\n    if (y2 > maxY) {\n      maxY = y2;\n    }\n  }\n\n  var scale = this.options['scale'];\n  var lineWidth = this.options['line-width'];\n\n  if (this.minXFromSymbols < minX) minX = this.minXFromSymbols;\n\n  if (minX < 0) minX -= lineWidth;\n  if (minY < 0) minY -= lineWidth;\n\n  var width = maxX + lineWidth - minX;\n  var height = maxY + lineWidth - minY;\n\n  this.paper.setSize(width * scale, height * scale);\n  this.paper.setViewBox(minX, minY, width, height, true);\n};\n\nFlowChart.prototype.clean = function() {\n  if (this.paper) {\n    var paperDom = this.paper.canvas;\n    paperDom.parentNode.removeChild(paperDom);\n  }\n};\n\nmodule.exports = FlowChart;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.chart.js\n// module id = 7\n// module chunks = 0","// defaults\nmodule.exports = {\n  'x': 0,\n  'y': 0,\n  'line-width': 3,\n  'line-length': 50,\n  'text-margin': 10,\n  'font-size': 14,\n  'font-color': 'black',\n  // 'font': 'normal',\n  // 'font-family': 'calibri',\n  // 'font-weight': 'normal',\n  'line-color': 'black',\n  'element-color': 'black',\n  'fill': 'white',\n  'yes-text': 'yes',\n  'no-text': 'no',\n  'arrow-end': 'block',\n  'class': 'flowchart',\n  'scale': 1,\n  'symbols': {\n    'start': {},\n    'end': {},\n    'condition': {},\n    'inputoutput': {},\n    'operation': {},\n    'subroutine': {},\n    'parallel': {}\n  } //,\n  // 'flowstate' : {\n  //   'past' : { 'fill': '#CCCCCC', 'font-size': 12},\n  //   'current' : {'fill': 'yellow', 'font-color': 'red', 'font-weight': 'bold'},\n  //   'future' : { 'fill': '#FFFF99'},\n  //   'invalid': {'fill': '#444444'}\n  // }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.defaults.js\n// module id = 8\n// module chunks = 0","// add indexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.indexOf) {\n  Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\n    \"use strict\";\n    if (this === null) {\n      throw new TypeError();\n    }\n    var t = Object(this);\n    var len = t.length >>> 0;\n    if (len === 0) {\n      return -1;\n    }\n    var n = 0;\n    if (arguments.length > 0) {\n      n = Number(arguments[1]);\n      if (n != n) { // shortcut for verifying if it's NaN\n        n = 0;\n      } else if (n !== 0 && n != Infinity && n != -Infinity) {\n        n = (n > 0 || -1) * Math.floor(Math.abs(n));\n      }\n    }\n    if (n >= len) {\n      return -1;\n    }\n    var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n    for (; k < len; k++) {\n      if (k in t && t[k] === searchElement) {\n        return k;\n      }\n    }\n    return -1;\n  };\n}\n\n// add lastIndexOf to non ECMA-262 standard compliant browsers\nif (!Array.prototype.lastIndexOf) {\n  Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {\n    \"use strict\";\n    if (this === null) {\n      throw new TypeError();\n    }\n    var t = Object(this);\n    var len = t.length >>> 0;\n    if (len === 0) {\n      return -1;\n    }\n    var n = len;\n    if (arguments.length > 1) {\n      n = Number(arguments[1]);\n      if (n != n) {\n        n = 0;\n      } else if (n !== 0 && n != (1 / 0) && n != -(1 / 0)) {\n        n = (n > 0 || -1) * Math.floor(Math.abs(n));\n      }\n    }\n    var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);\n    for (; k >= 0; k--) {\n      if (k in t && t[k] === searchElement) {\n        return k;\n      }\n    }\n    return -1;\n  };\n}\n\nif (!String.prototype.trim) {\n  String.prototype.trim = function() {\n    return this.replace(/^\\s+|\\s+$/g, '');\n  };\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.shim.js\n// module id = 9\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction End(chart, options) {\n  var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n  options = options || {};\n  options.text = options.text || 'End';\n  Symbol.call(this, chart, options, symbol);\n}\ninherits(End, Symbol);\n\nmodule.exports = End;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.end.js\n// module id = 10\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\nvar drawAPI = require('./flowchart.functions');\nvar drawPath = drawAPI.drawPath;\n\nfunction InputOutput(chart, options) {\n  options = options || {};\n  Symbol.call(this, chart, options);\n  this.textMargin = this.getAttr('text-margin');\n\n  this.text.attr({\n    x: this.textMargin * 3\n  });\n\n  var width = this.text.getBBox().width + 4 * this.textMargin;\n  var height = this.text.getBBox().height + 2 * this.textMargin;\n  var startX = this.textMargin;\n  var startY = height/2;\n\n  var start = {x: startX, y: startY};\n  var points = [\n    {x: startX - this.textMargin, y: height},\n    {x: startX - this.textMargin + width, y: height},\n    {x: startX - this.textMargin + width + 2 * this.textMargin, y: 0},\n    {x: startX - this.textMargin + 2 * this.textMargin, y: 0},\n    {x: startX, y: startY}\n  ];\n\n  var symbol = drawPath(chart, start, points);\n\n  symbol.attr({\n    stroke: this.getAttr('element-color'),\n    'stroke-width': this.getAttr('line-width'),\n    fill: this.getAttr('fill')\n  });\n  if (options.link) { symbol.attr('href', options.link); }\n  if (options.target) { symbol.attr('target', options.target); }\n  if (options.key) { symbol.node.id = options.key; }\n  symbol.node.setAttribute('class', this.getAttr('class'));\n\n  this.text.attr({\n    y: symbol.getBBox().height/2\n  });\n\n  this.group.push(symbol);\n  symbol.insertBefore(this.text);\n\n  this.initialize();\n}\ninherits(InputOutput, Symbol);\n\nInputOutput.prototype.getLeft = function() {\n  var y = this.getY() + this.group.getBBox().height/2;\n  var x = this.getX() + this.textMargin;\n  return {x: x, y: y};\n};\n\nInputOutput.prototype.getRight = function() {\n  var y = this.getY() + this.group.getBBox().height/2;\n  var x = this.getX() + this.group.getBBox().width - this.textMargin;\n  return {x: x, y: y};\n};\n\nmodule.exports = InputOutput;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.inputoutput.js\n// module id = 11\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Operation(chart, options) {\n  var symbol = chart.paper.rect(0, 0, 0, 0);\n  options = options || {};\n  Symbol.call(this, chart, options, symbol);\n}\ninherits(Operation, Symbol);\n\nmodule.exports = Operation;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.operation.js\n// module id = 12\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Start(chart, options) {\n  var symbol = chart.paper.rect(0, 0, 0, 0, 20);\n  options = options || {};\n  options.text = options.text || 'Start';\n  Symbol.call(this, chart, options, symbol);\n}\ninherits(Start, Symbol);\n\nmodule.exports = Start;\n\n// Start.prototype.render = function() {\n//   if (this.next) {\n//     var lineLength = this.chart.options.symbols[this.symbolType]['line-length'] || this.chart.options['line-length'];\n\n//     var bottomPoint = this.getBottom();\n//     var topPoint = this.next.getTop();\n\n//     if (!this.next.isPositioned) {\n//       this.next.shiftY(this.getY() + this.height + lineLength);\n//       this.next.setX(bottomPoint.x - this.next.width/2);\n//       this.next.isPositioned = true;\n\n//       this.next.render();\n//     }\n//   }\n// };\n\n// Start.prototype.renderLines = function() {\n//   if (this.next) {\n//     this.drawLineTo(this.next);\n//   }\n// };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.start.js\n// module id = 13\n// module chunks = 0","var Symbol = require('./flowchart.symbol');\nvar inherits = require('./flowchart.helpers').inherits;\n\nfunction Subroutine(chart, options) {\n  var symbol = chart.paper.rect(0, 0, 0, 0);\n  options = options || {};\n  Symbol.call(this, chart, options, symbol);\n\n  symbol.attr({\n    width: this.text.getBBox().width + 4 * this.getAttr('text-margin')\n  });\n\n  this.text.attr({\n    'x': 2 * this.getAttr('text-margin')\n  });\n\n  var innerWrap = chart.paper.rect(0, 0, 0, 0);\n  innerWrap.attr({\n    x: this.getAttr('text-margin'),\n    stroke: this.getAttr('element-color'),\n    'stroke-width': this.getAttr('line-width'),\n    width: this.text.getBBox().width + 2 * this.getAttr('text-margin'),\n    height: this.text.getBBox().height + 2 * this.getAttr('text-margin'),\n    fill: this.getAttr('fill')\n  });\n  if (options.key) { innerWrap.node.id = options.key + 'i'; }\n\n  var font = this.getAttr('font');\n  var fontF = this.getAttr('font-family');\n  var fontW = this.getAttr('font-weight');\n\n  if (font) innerWrap.attr({ 'font': font });\n  if (fontF) innerWrap.attr({ 'font-family': fontF });\n  if (fontW) innerWrap.attr({ 'font-weight': fontW });\n\n  if (options.link) { innerWrap.attr('href', options.link); }\n  if (options.target) { innerWrap.attr('target', options.target); }\n  this.group.push(innerWrap);\n  innerWrap.insertBefore(this.text);\n\n  this.initialize();\n}\ninherits(Subroutine, Symbol);\n\nmodule.exports = Subroutine;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/flowchart.symbol.subroutine.js\n// module id = 14\n// module chunks = 0","if (typeof jQuery != 'undefined') {\n\tvar parse = require('./flowchart.parse');\n\t(function( $ ) {\n\t\t$.fn.flowChart = function( options ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar chart = parse($this.text());\n\t\t\t\t$this.html('');\n\t\t\t\tchart.drawSVG(this, options);\n\t\t\t});\n\t\t};\n\t})(jQuery); // eslint-disable-line\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/jquery-plugin.js\n// module id = 15\n// module chunks = 0","module.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"Raphael\"\n// module id = 16\n// module chunks = 0"],"sourceRoot":""}